ExtJS findExact() 和自定义验证器错误

2024-01-05

我在组合框上使用自定义验证器:

function(v) {
    console.log(v === 'some value I know for SURE is in the store'); // (1)
    var index = this.getStore().findExact(this.displayField, v);
    return (index!==-1) ? true : 'Invalid selection';
}

基本上承认相同的集合强制选择 http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.field.ComboBox-cfg-forceSelection但允许用户键入任意文本以尝试自动完成。

然而;我的结果非常奇怪findExact()。例如,如果组合框的值当前为valid,并且用户执行空格+退格键,验证器将fail,即使 (1) 的输出是true.

任何想法是什么导致了这个问题?目前的最终体验非常有问题。


当您键入额外的空格时,存储将被过滤。按退格键并触发验证器后,存储仍然是空的。

如果您有本地商店,那么您可以在每次更改后延迟一段时间来验证组合。例子:

listeners: {
    change: function() {
        this.validate();
    },
    delay: 100
}

那应该足够了。

另一方面,如果您有远程存储,请尝试以下操作:

validator: function(v) {
    var store = this.getStore(),
        index = store.findExact(this.displayField, v);

    if (index === -1 && store.isLoading()) {
        store.on('load', function() {
            this.validate();
        }, this, { single: true, delay: 100 });
    }

    return (index !== -1) ? true : 'Invalid selection';
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExtJS findExact() 和自定义验证器错误 的相关文章

随机推荐