Wypróbowuję Backbone.js, a jedną z rzeczy, które próbuję, jest wywołanie zdalnego interfejsu API, więc muszę mieć możliwość przesłonięcia Backbone.sync, jak rozumiem dokumentację .
W samej dokumentacji nie ma przykładu, jak to zrobić, i wygląda na to, że nie ma grupy Google dla Backbone ... czy ktoś może podać przykład, jak to zrobić?
javascript
backbone.js
Picardo
źródło
źródło
Odpowiedzi:
Spójrz na ten przykład źródła z adnotacjami, w którym nadpisują one
Backbone.sync
alternatywą lokalnego magazynubackbone-localStorage
Zasadniczo Backbone.sync powinien być funkcją, która przyjmuje 4 argumenty:
Trzeba ognia albo
options.success
czyoptions.error
w zależności od tego, czymethod
się udało. Metody są w formacie:"create"
: oczekiwano, że utworzysz model na serwerze"read"
: oczekiwano, że przeczytasz ten model z serwera i zwrócisz go"update"
: oczekiwano, że zaktualizujesz model na serwerze z argumentem"delete"
: oczekiwano, że usuniesz model z serwera.Musisz wdrożyć te 4 metody i zdefiniować wszystko, co chcesz
"server"
Oczywiście są to tylko rzeczy, które
Backbone.sync
należy wdrożyć. Możesz zaimplementować więcejmethods
i przekazać więcej parametrów z powrotem,success
ale najlepiej tego nie robić.Najlepiej jest upewnić się, że robi to samo, co
Backbone.sync
obecnie, aby programowanie do interfejsu, a nie do implementacji. Jeśli chcesz zmienić zmodyfikowanąBackbone.sync
wersję na, powiedzmy, localStorage, nie musisz jej samodzielnie rozszerzać, aby pasowała do rozszerzonego Backbone.sync "[Edytować]
Pamiętaj również, że możesz używać wielu implementacji
sync
. Każde odwołanie doBackbone.sync
jest aktywne,(this.sync || Backbone.sync)
więc musisz po prostu zrobić coś takiego:Backbone.sync
jest po prostu domyślnym globalnym, używanym przez wszystkie modele, chyba że modele mająsync
specjalnie ustawioną metodę.źródło
(this.sync || Backbone.sync)
Zobacz edycję. Kolejną wskazówką jest przeczytanie opisanego źródła kręgosłupa. To wszystko tam jest!sync
z dowolnego miejsca w kodzie (zazwyczaj jest to overryddensync
), po prostu wykonajBackbone.sync.call(this, method, this, options)
.Wiem, że na tę odpowiedź jest trochę za późno, a odpowiedź od @Raynos jest świetna, ale zrobiłem to trochę inaczej i może przydałoby się to Tobie lub każdej innej osobie próbującej użyć API z Backbone.
Zamiast przesłonić Backbone.sync , nadpisałem Backbone.ajax , ponieważ jest to miejsce, w którym wykonywane jest żądanie ajax.
Oto przykład:
źródło
Zwykle muszę zastąpić
sync
metodę szkieletu, gdy potrzebuję zsynchronizować tylko niektóre atrybuty. Typowa implementacja wygląda następująco:źródło
Backbone.sync.apply(this, arguments);
? Jest to nieco bardziej elastyczne, jeśli na przykład zdecydujesz się pominąć argument „opcje” w nadpisanej wersjisync
.Backbone.model.save(attributes, {patch: true})
częściowych aktualizacji