我在组合框上使用自定义验证器:
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(使用前将#替换为@)