ユーザーの入力に応じてコンボボックスをフィルタリングする必要があるプロジェクトに取り組んでいます。汎用コンボボックス関数である必要があるヘルパー関数を持つように設定しました。
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");
}
私は2つのコンボボックスを持っています。1 つ目はビュー ファイルで定義されます。
{
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'
}
});
このコンボボックスは、表示されるウィンドウに追加されます。しかし、何らかの理由で、ここで説明した 2 番目のボックスに実際の値を入力しようとすると、keyUp イベントが発生しますが、値が null で、理由がわかりません。