我在Ext.data.JsonStore
的子类中有三个商店(Ext.Window
)。我想在所有这些上调用save()
,显示等待掩码直到完成,然后关闭窗口或处理错误。
有没有办法可以做到这一点,而不会有一些非常混乱的东西?我正在考虑通过在第一个等的save()
事件中调用第二个商店中的save
来做这个,然后将一些东西拼凑在一起,以便我可以设置一个回调,以便在最后一个商店时调用完成保存,但这似乎我最终会有一个大的嵌套混乱。因此,非常感谢任何关于如何干净地构建这一建议的建议。
答案 0 :(得分:1)
类似的东西:
var saveStores = function(stores) {
if (stores.length === 0) {
console.log("All stores saved");
} else {
var store = stores.pop();
store.save({
callback : function() {
saveStores(stores);
}
});
}
}
saveStores([store1, store2, store3]);
对不起,没时间测试 - 但算法可能在那里。
答案 1 :(得分:0)
我最终使用了像Drasill建议的东西,但它有点乱。我想如果你在没有等待第一次完成的情况下两次调用它就会搞砸,因为事件的运作方式。
var save_multiple_stores = function(stores, success, fail) {
if (stores.length === 0) {
if (success) {
success();
}
} else {
var store = stores.pop();
var listeners = {}
var unbind_listeners = function() {
for (var evt in listeners) {
store.un(evt, listeners[evt]);
}
}
var onsuccess = function() {
unbind_listeners();
save_multiple_stores(stores, success, fail);
}
var onfail = function() {
unbind_listeners();
if (fail) {
fail();
}
}
store.on('save', onsuccess);
listeners.save = onsuccess;
store.on('exception', onfail);
listeners.exception = onfail;
var num_records = store.save();
//save event will not fire if there are no changed records
if (num_records <= 0) {
onsuccess();
}
}
};