ExtJS 4动态更改网格存储
是否可以在ExtJS4中更改网格的存储 例如,我有两种型号: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数据,如 {
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);