我一直在研究Jquery通过使用when
的承诺,我想知道它是否能够满足我的情况,或者我是否需要重新思考我是如何做事的。
所以我有一个带有几个听众的backbone.js模型:
this.on('supplier:change', function(){
$.get('/supplier_details', function(data){
// fill in some fields here
anotherAjaxCallInAnotherFunction();
});
});
anotherAjaxCallInAnotherFunction: function(){
// Another Ajax call
}
如果我像when
一样使用model.set({supplier: 'ss'}).done();
,那么承诺能够等到所有Ajax调用结束吗?
如果我在骨干模型中设置了多个需要多个Ajax调用的属性,该怎么办?承诺是否会封装模型的整个设置?
答案 0 :(得分:1)
在我实际尝试之前我没有意识到的一件事是你可以用这种方式链接Ajaz电话,你只需要对你的编码有点创意。
链接这类电话的最简单方法是:
this.on('supplier:change', function(){
return $.get('/supplier_details').then(function(data){
return anotherAjaxCallInAnotherFunction();
});
}
function anotherAjaxCallInAnotherFunction(){
return $.ajax();
}
只需链接这样的延迟对象,不仅可以使调用异步,而且可以在不锁定浏览器线程的情况下进行调用。
您可以在此处找到更多信息:http://api.jquery.com/jQuery.Deferred/
答案 1 :(得分:0)
你可以尝试:
$.when( firstAjaxCall, secondAjaxCall )
.done(
function(firstResp) { console.log(firstResp); },
function(secondResp) { console.log(secondResp); }
);
或者您可以listenTo
sync
个事件,并且在firstAjaxCall
成功返回后,您可以致电secondAjaxCall
:Backbone Events
“sync”(model,resp,options) - 当模型(或集合)与服务器成功同步时。