0

私はを使用して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呼び出しを必要とする複数の属性を設定した場合はどうなりますか?約束はモデルの設定全体をカプセル化しますか?

4

2 に答える 2

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/をご覧ください。

于 2013-04-17T08:33:03.273 に答える
0

あなたは試すことができます:

$.when( firstAjaxCall, secondAjaxCall )
  .done( 
      function(firstResp) { console.log(firstResp); },  
      function(secondResp) { console.log(secondResp); } 
  ); 

またはlistenTosyncイベントを行うことができ、正常に戻ったときにfirstAjaxCall、次のように呼び出すことができますsecondAjaxCallバックボーンイベント

「同期」(モデル、応答、オプション)—モデル(またはコレクション)がサーバーと正常に同期された場合。

于 2013-03-27T09:52:28.653 に答える