定型文を減らすためにカスタム ComboBox を作成しようとしています:
Ext.define('App.AutoComboBox', {
extend: 'Ext.form.field.ComboBox',
alias: 'widget.autocombobox',
states: null,
initComponent: function() {
this.callParent(arguments);
if (!this.states) {
this.queryMode = 'remote';
} else {
this.queryMode = 'local';
this.bindStore(Ext.create('Ext.data.Store', {
type: 'array',
fields: ['_placeholder_'],
data: _.map(this.states, function(state) {
return {_placeholder_ : state}; })
}));
this.displayField = this.valueField = '_placeholder_'
}
this.validator = function(v) {
var field = this.displayField,
index = this.getStore().findExact(field, v);
return (index!==-1) ? true : 'Invalid selection';
};
},
listeners: {
select: function(combo, records) {
console.log(combo.getStore().indexOf(records[0])); // !== -1
}
}
});
私はそれを次のように使用できるように:
requires: ['App.AutoComboBox'],
...
items: [{
xtype: 'autocombobox',
name: 'test_local',
fieldLabel: 'test_local',
states: [ 'cat', 'dog' ] // local
}, {
xtype: 'autocombobox',
name: 'test_remote',
fieldLabel: 'test_remote',
store: 'Chipmunks', // a remote store
displayField: 'chipmunk_name'
}]
...
しかし、何かがおかしい。AutoComboBox
正常にレンダリングされ、レコードのドロップダウンが正常に表示されますが、ドロップダウンからアイテムを選択すると、コンボボックスの表示フィールドが設定されません。ストアは選択されたレコードを (リスナーから見てselect
) 見つけたようですが、値はまだ設定されていません...
ヘルプ?ありがとう。
編集:新しいストアがバインドされthis.callParent(arguments)
た後に移動することで修正されました。これで修正される理由を説明する回答を受け入れています...(なぜ機能するのかわかりません..しかし、機能します)