jQuery の Deferred オブジェクトを使用して、バックボーン コレクションとモデルを介してデータのロードを操作できるようにしたいと考えています。モデルまたはコレクションのインスタンスを含めるために、完了および失敗のコールバックに提供される引数を変更する方法はありますか? 以下のようなものを想定しています。
var _sync = Backbone.sync;
Backbone.sync = function() {
var jqXhr = _sync.apply(this, arguments);
var self = this;
return jqXhr.pipe(function() {
var cbArgs = [self];
cbArgs.push.apply(cbArgs, arguments);
return cbArgs;
}
}
...
var c = new Backbone.Collection();
c.url = "/path/to/resources";
c.fetch().then(function(collection, data, textStatus, jqXhr) {
// do stuff with collection
});
もちろん、filter は配列を返すため、done コールバックは列挙された引数ではなく配列で呼び出されます。私の知る限り、パイプは提供された引数を変更することしかできず、追加することはできません。任意の提案をいただければ幸いです。
編集:これは非常に単純化された例です。元のコレクションに対してクロージャが作成されるため、それを操作するだけで済みます。ただし、複数のバックボーン ビューがフェッチされる同じデータに依存している可能性があるため、Deferred とコレクション インスタンスの両方ではなく、jQuery Deferred オブジェクトをこれらのビューに提供できるようにしたいと考えています。
別の編集:以下に解決策を投稿しましたが、他の提案は大歓迎です。