理解Jquery的承诺

时间:2013-03-27 09:31:28

标签: jquery backbone.js

我一直在研究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调用的属性,该怎么办?承诺是否会封装模型的整个设置?

2 个答案:

答案 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成功返回后,您可以致电secondAjaxCallBackbone Events

  

“sync”(model,resp,options) - 当模型(或集合)与服务器成功同步时。