4

我有一种情况,我需要保存一个 Backbone 模型,然后在它成功时遍历一个集合并保存它们,然后在每个成功时遍历另一个集合并保存它们,然后在所有这些都完成后执行一个 AJAX 请求。这就是我所拥有的:

backboneModel.save(
    {},
    {
         wait: true,
         success: function (model1, response1)
         {
              $.each(backboneCollection1.models, function () {
                    this.save(
                        {},
                        {
                             wait: true,
                             success: function (model2, response2)
                             {
                                  $.each(backboneCollection2.models, function () {
                                       this.save(
                                           {},
                                           {
                                                wait: true,
                                                success: function (model2, response2)
                                                {
                                                     //If i put the AJAX request here it will happen for every iteration which is not desired
                                                }
                                           });
                                  });
                              }
                         });
               });
               //If i put the AJAX request here it will fire after one iteration of the first each even with async set to false on the AJAX request
         }
   });

是否有人对在何处执行此 AJAX 请求有任何建议,以便在所有主干模型保存到服务器后仅触发一次?

4

2 回答 2

2

看看我创建的这个jsfiddle 。它取代了您的成功回调并使用承诺来保存您的模型,然后是集合 1,然后是集合 2。一旦所有这些都完成了,您就可以在 done() 中进行 ajax 调用。

大部分更改是用这个替换你上面的内容。

var saveEverything = backboneModel.save()
.pipe(function() { return saveCollection(backboneCollection1); })
.pipe(function() { return saveCollection(backboneCollection2); });
saveEverything.done(function() { console.log('done with everything, ajax time') });//make your ajax call in the done

如果您不知道 jQuery 承诺是什么,是一篇非常棒的解释承诺的博文。如果我的例子根本没有任何意义,或者只是问,我可以尝试解释正在发生的事情和正在发生的事情。

于 2012-10-26T19:09:38.410 回答
0

在遍历模型时进行计数,当计数 = 模型长度时,调用 AJAX

于 2012-10-26T17:49:34.490 回答