Javascript 主干网2;每个AJAX依赖项

Javascript 主干网2;每个AJAX依赖项,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,我目前有以下代码: 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)

我目前有以下代码:

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();}});
}
我如何修改它,使destroy只在所有ajax事务发生时触发?如果我之前有一个ajax请求,我只会使用success:参数,但我不能在这里这样做


在主干网中这样做的正确方法是什么?

我没有主干网方面的经验,但我会这样处理这个问题:

  • 获取活动的\u事务数
  • 在transaction.save()上,检查已处理的事务数(在成功和/或错误回调中),如果它与活动的\u事务数匹配,则销毁模型

一个可能的解决方案是创建一个自定义API方法,该方法将事务作为参数,并在服务器端执行任务。这将减少https请求并提高性能。

只需跟踪已处理的事务数,并在最后一次回调中触发销毁,如下所示:

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();}});
            }
          }
        });
    }
  );
handleSubmit:function(e)
{
var to_bucket=this.$('.transaction_bucket').val();
var remainingTransactions=window.app.model.active\u transactions.length;
var self=这个;
window.app.model.active\u transactions.each(
职能(事务)
{
save({bucket\u id:to\u bucket}{
成功:函数(){
剩余交易-=1;
if(剩余事务<1){
destroy({success:function(){window.app.model.bucket.fetch();}});
}
}
});
}
);
}

返回请求中使用的xhr对象。在jQuery1.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();}});
});

save()是异步进行的,因此无法在销毁被命中时获得成功保存的总数。这就是为什么jquery和主干网提供了成功:用于ajax操作的函数。我建议使用回调函数的原因也是一样的:成功函数与destroy()不同步。如前所述,我不知道主干网,但我用一些“伪代码”演示了我的逻辑:啊,我现在明白了,将destroy移到回调中。我误解了。或者可能只是在服务器端的模型中处理它,而不需要自定义主干API方法?主干是客户端框架,它需要调用服务器端API方法,这些方法将在服务器端运行模型逻辑以完成操作。如果我决定在客户端完成所有操作,我会这样做。我决定最好在服务器上进行。