Как изменить данные хранилища 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();
}
}
}