26

是否可以在 ExtJS 4 中更改网格的存储?

例如,我有两个模型:

User = Ext.define('User',{
  extend: 'Ext.data.Model',
  [...],
  hasMany: 'Product'
});

Product = Ext.define('Product',{
  extend: 'Ext.data.Model',
  [...]
});

和两个网格。第一个网格与使用User模型并从后端加载嵌套 json 数据的 Store 链接,例如

{
  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

4 回答 4

36

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

     grid1.on('itemclick', function(view, record) {
         grid2.reconfigure(record.products());
     );
于 2011-08-15T16:31:04.400 回答
21

您以错误的方式查看商店。商店永远连接到网格,因此没有grid.setStore(). 您不会更改网格的存储,而是更改该网格的存储中的 DATA。

现在,解决您的问题:您已经拥有一个包含数据的存储实例的部分是正确的。IE; user.products(). 尽管如此,您仍必须为您的网格创建一个商店。不过,这家商店不会有任何数据。现在,当您需要显示产品信息时,您需要使用数据加载网格的商店。您可以使用:

  • 加载()
  • 加载数据()
  • 加载记录()

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

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
于 2011-05-04T16:30:26.697 回答
9

如果要在创建网格后将商店附加到网格,可以使用bindStore()方法。

var store = user.products();
grid.getView().bindStore(store);

或者,您也可以使用 load()、loadData()、loadRecords() 方法,并将数据复制到您的存储中。

于 2013-06-18T20:56:49.597 回答
3

当我需要更新一些没有的数据reconfigure(自定义类继承自Ext.form.FieldSet)时,Abdel Olakara 的回答帮助了我。

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

这意味着您可以执行以下操作:

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());
于 2012-03-07T22:16:24.700 回答