我有一个List,当它直接绑定到商店时曾经工作但现在我希望该列表从原始商店的queryBy获取它的数据。
查看文档看起来像setItems应该做我想要的。
var myStore = Ext.getStore('myStoreData');
var myData = myStore.queryBy(function(item) {
return item.get('status') !== null;
});
// At this point myData looks valid and has the data I want.
// Ext.apply.create.Class {all: Array[5], items: Array[5], keys: Array[5], indices: Object, map: Object…}
Ext.getCmp('myListComponent').setItems(myData.items);
我一直收到错误"对象[object object]没有方法' getItemId'"。我尝试了其他各种咒语但没有成功。我还看了一下setData并添加但没有成功。
========================
在得到Thiem的回答之后,我最终创建了一个函数,该函数将创建现有商店的过滤副本,然后将List商店设置为该商店。以下代码用于其他人的启发......
storeCopy: function(store, filterBy) {
var records = [];
var allRecords = null;
if(filterBy)
allRecords= store.queryBy(filterBy);
else
allRecords= store.queryBy(function(){return true;});
allRecords.each(function(r){
var rec = r.copy();
rec.setId(r.getId());
records.push(rec);
});
var store2 = new Ext.data.Store({
recordType: store.recordType
});
store2.add(records);
return store2;
},
谢谢大家。
答案 0 :(得分:0)
setItems
方法完全不同。例如,假设您有Ext.Container
,其中包含表单,某些字段和一些交互按钮。这些东西是调用容器的子组件或项。它们通常在父容器的items
配置中声明,而setItems
旨在以编程方式设置该配置的值。所以它与商店逻辑无关。
在您的情况下,这是解决方案之一:
yourList.setStore('yourFilteredStore')
它应该重新加载...希望这有帮助