Задать вопрос

Как создать динамический combobox в extjs5?

Имеется пример кода https://fiddle.sencha.com/#fiddle/ita По событию beforeedit требуется изменить список дропбокса. Пытаюсь делать так:
beforeedit: function(editor, context, eOpts) {
    var store = Ext.data.StoreManager.lookup('columnStore');

    store.loadRawData([{name: '666', value: '666'}], false);
    Ext.getCmp('myComboBox').bindStore(store);
 },


Данный пример работает правильно только после второго клика по ячейке грида. Как сделать, чтобы список combobox динамически изменялся сразу по клику на ячейку c первого раза? P/S/ Полный лист измененного мной кода:

Ext.application({
name : 'Fiddle',

launch : function() {
    Ext.create('Ext.grid.Panel', {
        renderTo: Ext.getBody(),
        store: Ext.create('Ext.data.Store', {
            fields: ['combo', 'val'],
            data: [{combo: 1, val: 1},{combo: 2, val: 2}]
        }),
        columns: [{
            text: 'ComboColumn',
            dataIndex: 'combo',
            flex: 1,
            editor: {
                xtype: 'combobox',
                id: 'myComboBox',
                displayField: 'name',
                valueField: 'value',
                store: Ext.create('Ext.data.Store', {
                    queryMode: 'local',
                    storeId: 'columnStore',
                    fields: ['name', 'value'],
                    data: [{
                        name: '1', value: '1'
                    },{
                        name: '1', value: '1'
                    },{
                        name: '2', value: '2'
                    },{
                        name: '2', value: '2'
                    }]
                })
            }
        }],
        plugins: {
            ptype: 'cellediting',
            clicksToEdit: 1
        },
        listeners: {
                beforeedit: function(editor, context, eOpts) {
                    var store = Ext.data.StoreManager.lookup('columnStore');

                    store.loadRawData([{name: '666', value: '666'}], false);
                    Ext.getCmp('myComboBox').bindStore(store);
                },
                edit: function(editor, context, eOpts) {
                    var store = Ext.data.StoreManager.lookup('columnStore');
                    store.clearFilter(true);
                    store.load();
                }
            }
    });
}
});
  • Вопрос задан
  • 645 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@hortuk
Надеюсь кому-то будет полезен ответ. Создайте прототип своего стора и передавайте в конструктор нужные значения. Не уверен насколько корректное решение, но работает :)

Ext.getCmp('myComboBox').bindStore(Ext.create('Ext.data.Store',{
   fields: ['name', 'value'], 
   data: [{name: '666', value: '666'}]
  })
);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы