我已经结束了使用类似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