这更像是我在这里要求的最佳做法/建议,因为我已经找到了解决问题的方法,但我不知道:
等等,让我们回过头来讨论这个问题。我有一个图书管理器应用程序,它使用了两种对象:Book
和Author
。可以想象,每个Book
都有一个Author
,所以,我需要:
在ExtJS中,这涉及Ext.grid.Panel
和Ext.form.field.ComboBox
。
我在每个小部件上使用了相同的商店(AuthorStore
),因为我的Author
类非常简单(只有id
和authorName
作为字段)。最初,我使用autoLoad:true
属性作为商店,但是,正如我发现here,有更好的方法:在render
或{{1}上加载商店所需组件的事件。我完全同意这种说法。
之后,我注意到网格和组合都有不同的存储实例(每个都加载其数据)。这对我来说似乎很奇怪,因为基本上,两个商店实例都拥有完全相同的数据。此时,我想以某种方式为两个组件共享相同的商店实例。我做了类似的事情:
定义了一个返回单个商店实例的函数:
afterrender
将网格的商店属性从function getAuthorStore(){
return Ext.StoreMgr.lookup('authorStore') || Ext.create('BM.store.AuthorStore');
}
更改为store: 'AuthorStore',
为组合框做了同样的事情
更改store: getAuthorStore()
以声明AuthorStore
事件的附加属性和侦听器:
load
从 storeId: 'authorStore',
loaded: false,
listeners: {
load: function(store, records, success, operation, options) {
store.loaded = success;
console.log('store <<' + store.storeId + '>> was fully reloaded');
}
}
更改为网格的控制器商店属性为store: 'AuthorStore',
。此外,添加了store: getAuthorStore()
事件,并调用以下函数:
render
最后,我做了类似于组合框的操作(请注意使用的 loadStoreIfRequired: function() {
var me = this;
// loads the store only if the 'loaded' custom prop is not set
if (!me.store.loaded) {
me.store.load();
}
}
,以便组合商店在打开组合项时不会加载自己。
queryMode: 'local'
我想知道的是以下问题的答案:
非常感谢你花时间阅读我的问题。如果你有,请分享你的想法。
答案 0 :(得分:2)