ExtJS 4动态更改网格存储

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)

  • @jMerliN我会建议反对,因为它违背了api,你可能会看到一些奇怪的错误.我可以看到`grid.getStore()!= grid.getView().store`时出现的潜在问题我没有运行用例但是`grid.store.load()`不会触发视图刷新.`reconfigure`旨在允许网格更改存储,并且没有太多开销. (2认同)

Abd*_*oof 20

你正在以错误的方式看待商店.商店永远连接到网格,因此没有grid.setStore().您不要更改网格的商店,而是更改该网格的商店中的DATA.

现在,解决您的问题:您对已存在数据存储实例的部分是正确的.即; user.products().但是,您必须为您的网格创建一个商店.这个商店不会有任何数据.现在,当您需要显示产品信息时,需要使用数据加载网格存储.您可以使用:

  • 加载()
  • loadData()
  • loadRecord()

将数据加载到您的商店.在您的情况下,您可以执行以下操作:

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
Run Code Online (Sandbox Code Playgroud)

  • 在网格上更改商店是一种常见现象.grid.reconfigure可用于更改商店或列模型.此外,addRecords默认为"false". (5认同)

Sas*_*ato 9

如果要在创建网格后将存储附加到网格,可以使用bindStore()方法.

var store = user.products();
grid.getView().bindStore(store);
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用load(),loadData(),loadRecords()方法,并将数据复制到商店中.