Backbone _.each ajax依存関係
-
25-10-2019 - |
質問
私は現在このコードを持っています:
handleSubmit: function(e)
{
var to_bucket = this.$('.transaction_bucket').val();
// Move all the transactions for this bucket to the selected bucket
window.app.model.active_transactions.each(
function(transaction)
{
transaction.set({bucket_id: to_bucket});
transaction.save();
}
);
this.model.destroy({success: function() { window.app.model.buckets.fetch();}});
}
すべての_.each ajaxトランザクションが発生した後にのみ破壊がトリガーされるように、これを変更するにはどうすればよいですか?以前のAJAXリクエストが1つある場合、成功を使用するだけです。パラメーターですが、ここではできません。
バックボーンでこれを行う正しい方法は何ですか?
解決 3
考えられる解決策の1つは、トランザクションをパラメーターとして取得し、サーバー側でジョブを行ったカスタムAPIメソッドを作成することです。これにより、HTTPSリクエストが削減され、パフォーマンスも向上します。
他のヒント
model.save リクエストで使用されているXHRオブジェクトを返します。 jQuery 1.5では、これらのオブジェクトはそうです 繰延オブジェクト 同期メカニズムの構築に使用できます。
例えば、
var to_bucket = this.$('.transaction_bucket').val(),
calls=[],
mdestroy=this.model.destroy;
window.app.model.active_transactions.each(function (transaction) {
transaction.set({bucket_id: to_bucket});
calls.push(transaction.save());
});
$.when.apply($, calls).then(function () {
mdestroy({success: function () {window.app.model.buckets.fetch();}});
});
私はバックボーンの経験はありませんが、そうするようなこの問題にアプローチします:
- Active_Transactionsの数を取得します。
- transaction.save()で、処理されたトランザクションの数(成功および/またはエラーコールバック)を確認します。Active_Transactionsの数と一致する場合は、モデルを破壊します。
既に処理されているトランザクションの数を追跡し、最後のコールバックで破壊をトリガーします。
handleSubmit: function(e)
{
var to_bucket = this.$('.transaction_bucket').val();
var remainingTransactions = window.app.model.active_transactions.length;
var self = this;
window.app.model.active_transactions.each(
function(transaction)
{
transaction.save({bucket_id: to_bucket}, {
success: function(){
remainingTransactions -= 1;
if(remainingTransactions < 1) {
self.model.destroy({success: function() { window.app.model.buckets.fetch();}});
}
}
});
}
);
}
所属していません StackOverflow