我已經結束了使用類似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();
}
}
};
謝謝。我認爲這樣的事情可能會起作用。它實際上有點痛苦,雖然因爲'save()'似乎沒有任何參數,所以你必須先訂閱每個商店的事件......單調乏味 – 2010-08-12 16:19:09
我發佈了一個答案,以我更新的嘗試爲基礎這個。再次感謝 – 2010-08-13 11:09:54