在ExtJS 4中更改网格存储是否可行?
例如,我有两个模型:
User = Ext.define('User',{
extend: 'Ext.data.Model',
[...],
hasMany: 'Product'
});
Product = Ext.define('Product',{
extend: 'Ext.data.Model',
[...]
});
和两个网格。
第一个网格与Store链接,后者使用User
模型并从后端加载嵌套的json数据,如
{
users: [{
id: 1,
products: [
{id: 1},
{id: 2}
]
}, {
id: 2,
products: [
{id: 3},
{id: 4},
{id: 5}
]
}]
}
我想要的是当你点击第一个网格中的行时,第二个网格必须显示用户的产品,而不连接到服务器。
我所知道的是user.products();
返回一个Ext.data.Store
对象。
所以我的想法是将第二个网格的商店更改为user.products();
,但没有这样的方法grid.setStore()
: - )
提前致谢
答案 0 :(得分:36)
我认为更好的解决方案是:
grid1.on('itemclick', function(view, record) {
grid2.reconfigure(record.products());
);
答案 1 :(得分:20)
你正在以错误的方式看待商店。商店永远附加到网格,因此没有grid.setStore()
。您不要更改网格的商店,而是更改该网格的商店中的DATA。
现在,您的问题的解决方案:您对已存在数据存储实例的部分是正确的。即; user.products()
。但是,您必须为您的网格创建一个商店。这个商店不会有任何数据。现在,当您需要显示产品信息时,需要使用数据加载网格存储。您可以使用:
将数据加载到您的商店。在您的情况下,您可以执行以下操作:
myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
答案 2 :(得分:9)
如果要在创建网格后将商店附加到网格,可以使用bindStore()方法。
var store = user.products();
grid.getView().bindStore(store);
或者,您也可以使用load(),loadData(),loadRecords()方法,并将数据复制到商店中。
答案 3 :(得分:3)
reconfigure
的内容(自定义类继承自Ext.form.FieldSet
)时,Abdel Olakara的回答帮助了我。
但您不需要指定addRecords
或getRange
的范围,因为在这种情况下我们已经涵盖了默认值。
这意味着您可以:
myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());