我有一种情况,我需要保存一个 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 请求有任何建议,以便在所有 Backbone 模型保存到服务器后它只触发一次吗?
最佳答案
看看这个 jsfiddle我创建。它取代了您的成功回调并使用 Promise 来保存您的模型,然后是集合 1,然后是集合 2。完成所有这些后,您可以在 did() 中进行 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 的 promise 是什么,this是一篇非常棒的博客文章,解释了 Promise。如果我的例子根本没有任何意义,或者只是问,我可以尝试解释正在发生的事情和正在发生的事情。
关于jquery - 如何在多次 Backbone 保存后发出一个 AJAX 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091783/