ext4关于store更新的经典疑难问题
先看代码再说明:
{ xtype: "boundlist", id: "test", height: 413, deferInitialRefresh: false, autoScroll: true, displayField: 'name', valueField: 'id', //store: testStore store: Ext.create('Ext.data.Store',{ fields: ['id', 'name'], data: [{id: "1", name: "name1"}, {id: "2", name: "name2"}] }) }
<script> function c() { var test = Ext.getCmp("test"); var store = test.getStore(); store.removeAll(); var records = [{ id: '3', name: 'name3' }, { id: '4', name: 'name4'}]; for (var i = 0; i < records.length; i++) { store.add(records[i]); } } Ext.create('Ext.form.ComboBox', { id: 'test', fieldLabel: 'Choose State', store: Ext.create('Ext.data.Store', { fields: ['id', 'name'], data: [{ id: "1", name: "name1" }, { id: "2", name: "name2"}] }), queryMode: 'local', displayField: 'name', valueField: 'id', renderTo: Ext.getBody() });</script>楼主我来回答你的问题吧,当你指定比如combo的store为具体某个store对象后,据我查阅过api是无法重新绑定新的store。但是有些组件可以比如grid,它使用的方法是reConfigure 这个方法。 所以如果你非得要自己重新绑定store,那么这个就得你自己去扩展一个方法了,我相信grid可以做到reConfigure ,那么你也由能力可以做到.而实际上对于你的需求真没必要那么做,请试验一下我写的代码吧,基本上是在wzs_xyz兄弟上做下修改而已。。
[解决办法]
ext的ux有点bug吧,虽然API文档里面itemselector有getStore方法,但是实例调用的时候输出undefined。
还有就是itemselector这个组件视乎没有添加数据源的更新事件,当数据源更新的时候自动更新ui。
itemselector可以使用bindStore方法重新绑定数据源就好了
function c() { store.removeAll(); var records = [{ id: '3', name: 'name3' }, { id: '4', name: 'name4'}]; for (var i = 0; i < records.length; i++) { store.add(records[i]); } itemselector.bindStore(store)//重新绑定数据源 } Ext.onReady(function () { store = Ext.create('Ext.data.Store', { fields: ['id', 'name'], data: [{ id: "1", name: "name1" }, { id: "2", name: "name2"}] }); itemselector = Ext.create("Ext.ux.form.ItemSelector", { id: "test", height: 300, width: 400, displayField: 'name', valueField: 'id', renderTo: document.body, //因为调用不了getStore,所以数据源要传递变量而不是直接创建 store:store /*Ext.create('Ext.data.Store', { fields: ['id', 'name'], data: [{ id: "1", name: "name1" }, { id: "2", name: "name2"}] })*/ }); alert(itemselector.getStore)//输出undefined。。神奇了,应该是没有完善这个组件 });
[解决办法]