所以我有panel
(让我们称之为fooPanel
)包含一个grid
(让我们称之为 if fooGrid
,其中有一些store
)。fooPanel
可以插入一些tabpanel
。所以问题是,可以tabpanel
包含两个(或更多) 的实例fooPanel
,并带有一些不同的参数。我认为这里的问题很明显。由于fooGrids
面板上的内容相同stores
,因此一旦我重新加载一个商店,两者fooGrids
都将被重新加载。(因为他们有相同的stores
)。有针对这个的解决方法吗?或者我应该限制用户只打开一个实例fooPanel
pertabpanel
问问题
4862 次
3 回答
8
除了每个网格创建一个商店之外,没有简单的解决方案。如果您不想创建多个商店实例的原因是为了避免多次加载,您可以在代理级别破解某种缓存。
编辑如何为您的网格创建多个商店的示例
您可以在您的网格方法中自己创建商店实例(即使用Ext.create('My.Store')
) :initComponent
Ext.define('My.Store', {
extend: 'Ext.data.Store'
,fields: ['name']
,proxy: {
type: 'memory'
,reader: 'array'
}
,data: [['Foo'],['Bar'],['Baz']]
});
Ext.define('My.Grid', {
extend: 'Ext.grid.Panel'
,columns: [{dataIndex: 'name'}]
,initComponent: function() {
// /!\ Do that BEFORE calling parent method
if (!this.store) {
this.store = Ext.create('My.Store');
}
// ... but don't forget to call parent method
this.callParent(arguments);
}
});
// Then I can create multiple grids, they will have their own store instances
Ext.create('My.Grid', {
renderTo: Ext.getBody()
,height: 200
});
Ext.create('My.Grid', {
renderTo: Ext.getBody()
,height: 200
});
或者您可以在创建时指定一个新的商店实例:
Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody()
,height: 200
,columns: [{dataIndex: 'name'}]
,store: Ext.create('My.Store') // one instance
});
Ext.create('Ext.grid.Panel', {
renderTo: Ext.getBody()
,height: 200
,columns: [{dataIndex: 'name'}]
,store: Ext.create('My.Store') // two instances!
});
但是,就我而言,我通常不会费心创建完整的商店定义。我在模型中配置代理,并使用该模型使用内联存储配置(内联配置将变成它们自己的实例,在 Ext4 中)。例子:
Ext.define('My.Grid', {
extend: 'Ext.grid.Panel'
,columns: [{dataIndex: 'name'}]
// inline store configuration
,store: {
// The model takes care of the fields & proxy definition
model: 'My.Model'
// other params (like remoteSort, etc.)
}
});
// Now I can create plenty of My.Grid again, that won't interfere with each other
于 2013-07-26T12:07:14.373 回答
2
在 ExtJS 5 中,您可以利用 Chained Stores。这样,您就可以拥有一个源商店,而其他商店则使用不同的过滤器查看同一家商店。
http://docs.sencha.com/extjs/5.0.0/whats_new/5.0/whats_new.html
于 2014-07-15T18:22:46.060 回答
1
这篇文章可能对你有所帮助
Ext.define('App.store.MyStore', {
extend : 'Ext.data.Store',
alias : 'store.app-mystore', // create store alias
// ...
});
Ext.define('App.view.MyCombo', {
extend : 'Ext.form.field.ComboBox',
xtype : 'app-mycombo',
requires : [
'App.store.myStore'
],
// combo config
store : {
type : 'app-mystore' // store alias; type creates new instance
}
});
于 2014-04-17T08:54:47.270 回答