-
25-10-2019 - |
题
我目前有此代码:
handleSubmit: function(e)
{
var to_bucket = this.$('.transaction_bucket').val();
// Move all the transactions for this bucket to the selected bucket
window.app.model.active_transactions.each(
function(transaction)
{
transaction.set({bucket_id: to_bucket});
transaction.save();
}
);
this.model.destroy({success: function() { window.app.model.buckets.fetch();}});
}
我如何修改它,以便仅一旦所有_EJAX交易发生一次销毁触发器?如果我有一个以前的AJAX请求,我只会使用成功:参数,但是我在这里做不到。
在骨干方面做到这一点的正确方法是什么?
解决方案 3
一种可能的解决方案是创建一种自定义API方法,该方法将交易作为参数并在服务器端完成工作。这将减少HTTPS的要求并提高性能。
其他提示
模型 返回请求中使用的XHR对象。使用jQuery 1.5,这些对象是 递延对象 您可以用来构建同步机制。
例如,
var to_bucket = this.$('.transaction_bucket').val(),
calls=[],
mdestroy=this.model.destroy;
window.app.model.active_transactions.each(function (transaction) {
transaction.set({bucket_id: to_bucket});
calls.push(transaction.save());
});
$.when.apply($, calls).then(function () {
mdestroy({success: function () {window.app.model.buckets.fetch();}});
});
我没有骨干的经验,但是我会这样解决这个问题:
- 获取Active_transactions的数量。
- 在Transaction.save()上,检查已处理的事务的数量(在成功和/或错误回调中),如果与Active_transactions的数量匹配,则将破坏模型。
只需跟踪已经处理过的交易数量,并在最后一个回调中触发销毁的数量:
handleSubmit: function(e)
{
var to_bucket = this.$('.transaction_bucket').val();
var remainingTransactions = window.app.model.active_transactions.length;
var self = this;
window.app.model.active_transactions.each(
function(transaction)
{
transaction.save({bucket_id: to_bucket}, {
success: function(){
remainingTransactions -= 1;
if(remainingTransactions < 1) {
self.model.destroy({success: function() { window.app.model.buckets.fetch();}});
}
}
});
}
);
}
不隶属于 StackOverflow