如何在ExtJS 4.1中更改组合框存储数据

时间:2012-07-19 13:27:58

标签: extjs extjs4.1

我定义了一个这样的组合框

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

然后,在某些情况下,商店应该加载新数据,所以我从组合框中获取商店并试试这个:

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

但在此之后,组合框有一个没有任何可见内容的下拉列表,只有很小的空白行。

2 个答案:

答案 0 :(得分:17)

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

// to this...
oFunctionStore.loadData( [ [ 'dothis' ], [ 'dothat' ], [ 'dosomething' ] ] );
  • 组合框隐式创建Ext.data.ArrayStore,它会将数组转换为模型。

  • 传递给data参数 loadData应该是一系列模型,或者是 可以转换为模型的对象数组(在本例中为 数组数组。)

  • 在初始存储加载时,原始数组在幕后转换为[ [ 'none' ] ]

查看示例here

答案 1 :(得分:1)

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();
        }
    }

}