如何在Ext JS 6.6 Modern工具箱中获得selectOnFocus: true功能?

问题描述 投票:0回答:1

在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'不是一个选项。

extjs extjs6 extjs6-modern sencha-test
1个回答
0
投票

你可以使用我的覆盖得到想要的行为。

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();
                    }
                }
            }
        }
    }
});

Fiddle

P.S.你的测试中不能用`focus(true)?

© www.soinside.com 2019 - 2024. All rights reserved.