ExtJS 4动态更改网格存储



Answers

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

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

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

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

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
Question

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

提前致谢




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

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

这意味着您可以:

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



Related