Как изменить данные хранилища combobox в ExtJS 4.1

Я определяю combobox как это

{
  xtype: 'combobox',
  emptyText: 'Functions'
  store: [ 'none' ]
}

то на каком-то событии хранилище должно загружать новые данные, поэтому я получаю хранилище из выпадающего списка и пробую это:

oFunctionStore.loadData( ['dothis', 'dothat', 'dosomething' ] );

но после этого в поле со списком отображается выпадающий список без какого-либо видимого содержимого, только маленькие пустые строки.

Ответы

Ответ 1

// Change this...
oFunctionStore.loadData( ['dothis', 'dothat', 'dosomething' ] );

// to this...
oFunctionStore.loadData( [ [ 'dothis' ], [ 'dothat' ], [ 'dosomething' ] ] );
  • Сопоставление неявно создает Ext.data.ArrayStore, который преобразует массивы в модели.

  • Параметр data передан loadData, как ожидается, будет либо массивом моделей, либо массив объектов, которые могут быть преобразованы в модели (в этом случае массив массивов).

  • В начальной загрузке хранилища исходный массив был преобразован в [ [ 'none' ] ] за кулисами.

См. пример здесь

Ответ 2

carStore - любой магазин для главной комбо.

carModelStore - магазин, который должен зависеть от выбора в комбинированном поле на основе carStore

var carModelStore = new Ext.data.Store({
    reader: new Ext.data.JsonReader({
        fields: ['id', 'car-model'],
        root: 'rows'
    }),
    storeId: 'car-model-store',
    proxy: new Ext.data.HttpProxy({
        url: 'carmodeldataprovider.json?car-name=lamborghini'
    }),
    autoLoad: true
});


{ xtype: 'combo', name: 'car-name', fieldLabel: 'Car', mode: 'local', store: carStore, triggerAction: 'all',
    listeners: {
        select: function(combo, records, eOpts){
            var carName = records.get('car-name');  // the element selected in combo
            var carModelStore = Ext.StoreMgr.lookup("car-model-store");

            carModelStore.proxy.setUrl('carmodeldataprovider.json?car-name=' + carName, false);
            carModelStore.reload();
        }
    }

}