2016-08-11 7 views
0

同じコレクションで2つのバックエンド呼び出しを呼び出し、その結果を単一のコレクションオブジェクトにマージする必要があります。また、両方のfetchメソッドが成功すると、 'sync'メソッドをトリガーする必要があります。ここで2つのバックボーンフェッチコールを作成して結合する方法

は、コードスニペット

myCollection.fetch({ headers: {myheader: 'test1'}, data: {status: 'test1'}, reset: true}); 
myCollection.fetch({ headers: {myheader: 'test2'}, data: {status: 'test2'}, reset: true, add: true}); 

myCollection.once('sync error', function() { 
    $('#js-my-grid').html(view.render().el); 

}); 

である私は一度だけ、両方のフェッチのが完了しているビューをレンダリングする必要があります。どのように可能ですか?

ありがとうございます。

+0

'reset'パラメータを使用する必要がありますか?私はそれをテストしていないが、それは最後に応答が来るかどうかは、コレクションにあるものになると思う。それらは一緒にマージされません。それはあなたが何を期待しているのか、そういうことが連続して起こっているのでしょうか? – rdubya

答えて

1

あなたはそれらのいずれかに障害が発生したとして、それは、すぐにビューをレンダリングすることをOKであれば$.whenを使用することができるはずです。

$.when(myCollection.fetch({ headers: {myheader: 'test1'}, data: {status: 'test1'}, reset: true}), 
     myCollection.fetch({ headers: {myheader: 'test2'}, data: {status: 'test2'}, reset: true, add: true})) 
.always(function() { 
    $('#js-my-grid').html(view.render().el); 
}); 

あなたは次のようになりますコールバックを割り当てることができます.done使用している場合両方が成功したときに実行され、.failを使用すると、いずれかの要求が失敗した場合に実行されるコールバックを定義できます。私は.alwaysを使用しました。なぜなら、リクエストが成功したかどうかに関係なく、ビューをレンダリングしたいと思っていたからです。

0
var count = 0; 

myCollection.fetch({..., success: _internal}); 
myCollection.fetch({..., success: _internal}); 

function _internal() { 
    count ++; 
    if (count < 2) return; 
    //2 calls are finished. do whatever you want here. 
} 
+0

2つのコレクションの結果を1つのコレクションにマージしたい場合、@ rdubyaが指摘しているように、 'reset:true'の必要はありません – user10

関連する問題