ExtJS 4动态更改网格存储

时间:2011-05-04 13:25:19

标签: extjs grid extjs4

在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(): - )

提前致谢

4 个答案:

答案 0 :(得分:36)

我认为更好的解决方案是:

     grid1.on('itemclick', function(view, record) {
         grid2.reconfigure(record.products());
     );

答案 1 :(得分:20)

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

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

  • 负载()
  • loadData()
  • loadRecord()

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

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的回答帮助了我。

但您不需要指定addRecordsgetRange的范围,因为在这种情况下我们已经涵盖了默认值。

这意味着您可以:

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());