2013-10-21 2 views
6

をフェッチし、次を行うためのセクシーな方法があります:バックボーン複数のコレクションが

scheduleSubjects.fetch({ 
    success: function(){ 
     subjectList.fetch({ 
      success: function(){ 
       assignments.fetch({ 
        success: function(){ 
         _this.render(); 
        } 
       }); 
      } 
     }); 
    } 
}); 

私は、すべてのデータは、私はそれを操作開始する前に取得することにしたいです。

ありがとうございました。

+4

スケジュールを変更してください.SexySubjectsをスケジュールしてください。 ;) –

+2

ネストされたコールは親コールに依存しますか? –

答えて

8

あるレンダリングすることで、複数の非同期呼び出しが完了したとき、あなたはコールバックをトリガする$.whenを使用することができますしたがって、Backbone.fetchも遅延オブジェクトを返します。


.thenの代わりに、あなたのオリジナルのコールバックのパラメータを通過する、.doneです(あなたがOPに必要はありませんが、いくつかのケースではあります):

$.when(scheduleSubjects.fetch(), subjectList.fetch(), assignments.fetch()) 
    .done(function(scheduleSubjects, subjectList, assignments) { 
     _this.render(); 
    }) 
); 
+0

このソリューションは魅力的に機能します。結局のところあなたの答えは最高です:) –

+0

いいですが、このソリューションではロードの進捗状況をどのように把握できますか? –

0

私がこれを行うと考えることができる唯一の他の方法は、バックボーンのbind()trigger()です。

イベントでは、この機能を実現できます。より良い方法があるかどうかはわかりません。最初のコレクションを読み込んだら、2番目のコレクションの読み込みをトリガーすることができます。理論的には、2つのコレクションをあなたの例ごとに結合すべきではありません。イベントベースの読み込みでは、subjectListscheduleSubjectsが切り離されます。

2

あなたが使用することができますいずれかの約束:

scheduleSubjects.done(function() { 
    subjectList.fetch(); 
}); 
subjectList.done(function() { 
    assignments.fetch(); 
}); 
assignments.done(function() { 
    _this.render(); 
}); 
scheduleSubjects.fetch(); 

またはイベントリスナーは:

subjectList.listenToOnce(scheduleSubjects, 'sync', subjectList.fetch); 
assignments.listenToOnce(subjectList, 'sync', assignments.fetch); 
this.listenToOnce(assignments, 'sync', this.render); 
scheduleSubjects.fetch(); 

あなたはビュー内のこれらのリスナーを定義する必要はありません。彼らはアプリケーションレベルで暮らすことができました。これはJQuery.ajaxために動作することを

$.when(scheduleSubjects.fetch(), subjectList.fetch(), assignments.fetch()).then(_this.render); 

注:ビューが気に だけの事は一度assignmentsJQuery's deferred objectsを使用してフェッチ

7
var collections = [scheduleSubjects, subjectList, assignments]; 
var complete = _.invoke(collections, 'fetch'); 

$.when(null, complete).then(function(){ 
    _this.render(); 
}); 

使用約束とアンダースコアの_.invoke()

+0

セクシー:)まさに私が探していたもの! –

+4

'$ .when()' 'null'の最初の引数はなぜですか? –

関連する問題