在Ext JS 6.6中,我们如何获得selectOnFocus: true功能?
经典的工具包,一个文本字段有 选择对焦truefalse,所以当组件获得焦点时,文本字段中的数据都被选中。
items: [{
xtype: 'textfield',
selectOnFocus: true
}]
Modern工具箱没有这个属性。我理解modern全部兼容CSS3和非常适合移动设备之间的需求,以及与移动设备工作的差异。使用Modern toolkit,你可以通过
Ext.ComponentQuery.query('#textfield')[0].focus(true);
这在写代码的时候是很好的。但是我发现的问题是在使用Sencha Test和下面的代码的时候
it("Checking existing email error notification", function () {
ST.component('textfield[name=\"createemail\"]').click();
ST.play([
{ type: "type", target: "textfield[name=\"createemail\"] => input", text: "someemail.email.com", caret:0 }
.... additional code here
]);
});
it("Some test", function() {
ST.component('textfield[name=\"createemail\"]').click();
.... additiona code here
});
在第二个测试块中,在文本字段中点击不会选择所有的文本,所以如果我想替换现有的文本,就必须清除它,或者从随机位置开始插入点。
那么我们如何才能在Modern工具包中实现selectOnFocus: true功能呢?
我可以看到,在某些情况下,在Modern中拥有这个功能实际上更重要,因为在移动设备上,ctrl'a'不是一个选项。
你可以使用我的覆盖得到想要的行为。
Ext.define('Ext.field.TextOverride', {
override: 'Ext.field.Text',
onFocus: function (e) {
var me = this,
focusTarget, focusElDom;
this.callParent(arguments)
var me = this,
focusTarget, focusElDom;
if (focusTarget = me.getFocusEl()) {
focusElDom = focusTarget.dom;
if (focusElDom) {
focusTarget.focus();
if (me.selectOnFocus && (me.selectText || focusElDom.select)) {
if (me.selectText) {
if (Ext.isArray(selectText)) {
me.selectText.apply(me, selectText);
} else {
me.selectText();
}
} else {
focusElDom.select();
}
}
}
}
}
});
P.S.你的测试中不能用`focus(true)?