Chciałbym móc użyć obiektu odroczonego jQuery do obsługi ładowania danych przez kolekcje i modele szkieletu. Czy istnieje sposób, w jaki mogę zmodyfikować argumenty dostarczone do wykonanych i niepowodzeniem wywołań zwrotnych, aby uwzględnić wystąpienie modelu lub kolekcji? Ja przewidując coś jak następuje:Czy mogę użyć metody deferred.pipe jQuery w celu zmodyfikowania argumentów dostarczonych do odwołanych/odrzuconych wywołań zwrotnych?
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
});
oczywiście, ponieważ filtr jest zwrócenie tablicy, wykonane zwrotna jest wywoływana z tablicy, zamiast wymienionych argumentów. O ile widzę, potok może jedynie modyfikować dostarczone argumenty, a nie dodawać. Wszelkie sugestie będą mile widziane.
Edytuj: To jest bardzo uproszczony przykład; odkąd zostało stworzone zamknięcie nad oryginalną kolekcją, mógłbym po prostu operować na tym. Jednak przypadek użycia jest taki, że wiele widoków kręgosłupa może opierać się na tych samych pobieranych danych, więc chciałbym móc po prostu dostarczyć obiekt odroczony jQuery do tych widoków, zamiast zarówno instancji Odroczona, jak i kolekcji.
Kolejna edycja: wysłano poniżej rozwiązanie, ale wszelkie inne sugestie są mile widziane.
Edite d, aby rozszerzyć oryginalne jqXhr o nowe $ .Deferred, zachowując obsługę wszystkich metod specyficznych dla AJAX (.success, .abort, itp.). – philm