我目前有此代码:

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();}});
            }
          }
        });
    }
  );

}

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top