Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS 4动态更改网格存储_Extjs_Grid_Extjs4 - Fatal编程技术网

ExtJS 4动态更改网格存储

ExtJS 4动态更改网格存储,extjs,grid,extjs4,Extjs,Grid,Extjs4,是否可以在ExtJS4中更改网格的存储 例如,我有两种型号: User = Ext.define('User',{ extend: 'Ext.data.Model', [...], hasMany: 'Product' }); Product = Ext.define('Product',{ extend: 'Ext.data.Model', [...] }); 和两个网格。 第一个网格与Store链接,Store使用User模型并从后端加载嵌套的json数据,如 {

是否可以在ExtJS4中更改网格的存储

例如,我有两种型号:

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

Product = Ext.define('Product',{
  extend: 'Ext.data.Model',
  [...]
});
和两个网格。 第一个网格与Store链接,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()
:-)


提前感谢

你看错了商店。存储永远连接到网格,因此没有
grid.setStore()
。您不会更改网格的存储,而是更改该网格存储中的数据

现在,您的问题的解决方案:您已经有了数据存储实例的零件,您的操作是正确的。ie<代码>用户.产品()。不过,您必须为网格创建一个存储。但是,此存储区将没有任何数据。现在,当您需要显示产品信息时,您需要用数据加载网格的存储。您可以使用:

  • 加载()
  • loadData()
  • loadRecord()
将数据加载到存储中。在您的情况下,您可以执行以下操作:

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

我认为更好的解决办法是:

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

Abdel Olakara的回答在我需要更新没有
重新配置
(从
Ext.form.FieldSet继承的自定义类
)的数据时帮助了我

但是您不需要指定
addRecords
getRange
的范围,因为本例中包含了默认值

这意味着您可以:

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

如果要在创建网格后将存储附着到网格,可以使用以下方法


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

非常感谢,这正是我所需要的。更改网格上的存储是常见的情况。grid.reconfigure可用于更改存储或列模型。另外,addRecords的默认值为“false”。
重新配置
的作用远不止重新绑定存储。如果有两个结构相同的存储,但只想更改网格的备份存储,他们需要通过调用
getView
来获取存储的
Ext.grid.View
,并使用新存储调用
bindStore
方法。@jMerliN我建议不要这样做,因为这违反了api,您可能会看到一些奇怪的错误。当
grid.getStore()!=grid.getView().store
我还没有运行过这个用例,但是
grid.store.load()
不会触发视图刷新<代码>重新配置旨在允许网格更改存储,并且没有太多开销。
var store = user.products();
grid.getView().bindStore(store);