jQueryのDeferredオブジェクトを使用して、バックボーンコレクションとモデルを介してデータを読み込むことができるようにしたいと考えています。モデルやコレクションのインスタンスを含めるためにdoneおよびfailコールバックに渡される引数を変更する方法はありますか?フィルタは、配列を返すされているので、行ってコールバックがむしろ列挙引数よりも、配列で呼び出され、もちろんjQueryのdeferred.pipeメソッドを使用して、解決済みコールバックまたは失敗したコールバックに提供された引数を変更できますか?
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
});
:私は次のようなものを想定しています。私が見る限りでは、パイプは与えられた引数だけを変更することができ、追加することはできません。任意の提案をいただければ幸いです。
編集:これは非常に単純な例です。クロージャーが元のコレクションの上に作成されるので、私はそれを操作することができます。しかし、ユースケースでは、複数のBackbone Viewsが同じデータをフェッチされている可能性があるため、DeferredとCollectionインスタンスの両方ではなく、jQuery Deferredオブジェクトをこれらのビューに提供できます。
もう1つの編集:以下の解決策を掲載しましたが、他の提案は歓迎します。
私は.pipe方法はすぐに変更された引数を使用して解決される新しい$ .Deferredを返すことによって、これを達成することができます見つけた
Edite d。新しい$ .DeferredでオリジナルのjqXhrを拡張し、すべてのAJAX固有のメソッド(.success、.abortなど)のサポートを維持します。 – philm