Javascript 等待加载多个ExtJS存储
我在代码中的不同位置使用了多个存储(JSON)。一个用途是根据某些条件将这些数据聚合到一个新的存储中(wich已经拥有自己的数据) 例如,我有两个存储区:一个存储区具有position\u id、position\u name,另一个存储区包含role\u id、role\u name。 现在有另一个部分初始化的存储,我想使用两个前置存储来完成它 Ex:StoreRoles:role\u id、role\u值 StorePositions:position\u id、position\u值 StoreLineup:lineup\u id、参与者、角色\u id、角色\u值、职位\u id、职位\u值 在创建StoreLineup时,我希望role_值和position_值根据其ID取值 这是可行的,但并不总是如此。 事实上,当ExtJS传递给StoreLineup初始化时,StoreRoles和StorePositions并不总是准备就绪。最后,数据并不总是被设置的,在这一点上我会遇到一些JavaScript错误(因为我在现有元素中使用get() 所以我想推迟StoreLineup的初始化。 虽然没有加载其他两个存储,但StoreLineup不能太多。必须在完全创建其他存储之后创建它 但是怎么做呢? 我没有找到任何有效的解决方案(使用加载事件等)。 目标是在GridPanel中呈现完整的StoreLineJavascript 等待加载多个ExtJS存储,javascript,extjs,store,extjs3,Javascript,Extjs,Store,Extjs3,我在代码中的不同位置使用了多个存储(JSON)。一个用途是根据某些条件将这些数据聚合到一个新的存储中(wich已经拥有自己的数据) 例如,我有两个存储区:一个存储区具有position\u id、position\u name,另一个存储区包含role\u id、role\u name。 现在有另一个部分初始化的存储,我想使用两个前置存储来完成它 Ex:StoreRoles:role\u id、role\u值 StorePositions:position\u id、position\u值 St
我使用extjs3.4这在4.x中使用商店的
isLoading
方法要容易得多
但是对于3.4,您可以使用加载侦听器来完成它
在创建网格面板之前,在所有要加载的存储上附加一个加载侦听器
在listener中,执行以下操作:
myGridPanelsContainer.loadedStoresArray
或其他东西当最后一个存储加载时,加载侦听器将创建网格。只是一个提示,使用Ext.util.MixedCollection而不是数组可能更方便
Ext.define('My.app.StoreLoader', {
extend: 'Ext.util.MixedCollection',
singleton: true,
register: function (item) {
this.add(item);
},
unregister: function (item) {
this.remove(item);
},
getKey: function (o) {
return o.instanceId;
},
storeloadCallback: function (id, data) {
var item = this.get(id);
if (item) {
this.unregister(item);
//do more stuff if needed, like fire custom events, etc
}
}
});
这个例子是基于惊人的“多文件上传器”从
这里使用了相同的原理,但不是存储加载,而是文件上传,尽管行为与我们非常相似。非常感谢!我使用你的解决方案,效果很好。除此之外,我不创建存储状态的网格关联,而是在所有其他存储(取决于它)都已完全加载的情况下加载LineupStore。因此,只有在加载LineupStore时才会填充网格。