我正在开发一个项目,要求我在用户输入时过滤组合框。我设置它,以便我有一个辅助函数,它应该是一个通用的组合框函数:
filterComboGeneral: function(combo, filterfield)
{
// try
// {
console.log(combo.getXType());
var passpatt = '^' + combo.getValue().toLowerCase();
if (combo.store.isFiltered())
{
combo.store.clearFilter();
}
combo.store.filterBy(function(record) {
var pattern = new RegExp(passpatt);
var teststr = record.get(filterfield).toLowerCase();
var retval = pattern.test(teststr);
return retval;
});
// }
// catch (e) {
// console.log("null was encountered in text box. Moving on");
// }
}
请忽略已注释的try-catch,我对它们进行了评论,以检查实际抛出的异常。
然后我有一个特定的函数来调用这个通用函数:
filterMainCombo: function(combo, release)
{
this.filterComboGeneral(combo, "name");
}
然后我有两个组合框。第一个在视图文件中定义:
{
xtype: 'combobox',
itemId: 'scriptfilt',
store: {
type: 'scriptstore'
},
valueField: 'id',
displayField: 'name',
typeAhead: true,
autoSelect: true,
minChars: 1,
typeAheadDelay: 0,
enableKeyEvents: true,
listeners: {
keyUp: 'filterMainCombo'
}
}
这个组合框非常合适。
然后我有另一个在我的控制器文件中声明为变量的那个(这与我的过滤器函数所在的文件相同):
var scriptcb = Ext.create('Ext.form.ComboBox', {
fieldLabel: 'Script',
store: scrstore,
displayField: 'name',
valueField: 'id',
forceSelection: true,
itemId: 'scriptcombo',
typeAhead: true,
autoSelect: true,
minChars: 1,
typeAheadDelay: 0,
enableKeyEvents: true,
listeners: {
keyUp: 'filterMainCombo'
}
});
然后将该组合框添加到显示的窗口中。但出于某种原因,每当我在这里描述的第二个框中输入实际值时,会触发keyUp事件,但该值为null并且不确定原因。