sun*_*say 25 grid extjs extjs4
在ExtJS 4中更改网格存储是否可行?
例如,我有两个模型:
User = Ext.define('User',{
extend: 'Ext.data.Model',
[...],
hasMany: 'Product'
});
Product = Ext.define('Product',{
extend: 'Ext.data.Model',
[...]
});
Run Code Online (Sandbox Code Playgroud)
和两个网格.第一个网格与Store链接,后者使用User
模型并从后端加载嵌套的json数据,如
{
users: [{
id: 1,
products: [
{id: 1},
{id: 2}
]
}, {
id: 2,
products: [
{id: 3},
{id: 4},
{id: 5}
]
}]
}
Run Code Online (Sandbox Code Playgroud)
我想要的是当你点击第一个网格中的行时,第二个网格必须显示用户的产品,而不连接到服务器.我所知道的只是user.products();
返回一个Ext.data.Store
对象.所以想法是改变第二个网格的商店user.products();
,但没有这样的方法grid.setStore()
:-)
提前致谢
pll*_*lee 36
我认为更好的解决方案是:
grid1.on('itemclick', function(view, record) {
grid2.reconfigure(record.products());
);
Run Code Online (Sandbox Code Playgroud)
Abd*_*oof 20
你正在以错误的方式看待商店.商店永远连接到网格,因此没有grid.setStore()
.您不要更改网格的商店,而是更改该网格的商店中的DATA.
现在,解决您的问题:您对已存在数据存储实例的部分是正确的.即; user.products()
.但是,您必须为您的网格创建一个商店.这个商店不会有任何数据.现在,当您需要显示产品信息时,需要使用数据加载网格存储.您可以使用:
将数据加载到您的商店.在您的情况下,您可以执行以下操作:
myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
Run Code Online (Sandbox Code Playgroud)
如果要在创建网格后将存储附加到网格,可以使用bindStore()方法.
var store = user.products();
grid.getView().bindStore(store);
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用load(),loadData(),loadRecords()方法,并将数据复制到商店中.