Można wysłuchać zdarzenia reset
z modelu i wykonać swoje czyszczenie i this.destroy()
w odpowiedzi. Po to są haczyki zdarzeń. Patrz: http://backbonejs.org/#Events-catalog
Uwaga: Absolutnie nie należy zmieniać ani zastępować żadnej metody ani właściwości poprzedzonej przedrostkiem, na przykład _removeReference
. Podkreślenia oznaczają, że ma to być wewnętrzna metoda lub własność, a wewnętrzne implementacje mogą się zmienić (ich interfejsy API są uznawane za niestabilne). Ulepszanie kręgosłupa może złamać dowolny kod, który opiera się na metodzie z podkreśleniem-prefiksem, nawet jeśli publikacja jest reklamowana jako zmiana kompatybilna wstecz.
Wiem, że twoje pytanie mówi "bez powtarzania", ale to naprawdę jest najbardziej niezawodny sposób radzenia sobie z tym. Rozważmy przypadek, w którym model został przeniesiony z jednej kolekcji do drugiej, ale wciąż nasłuchuje na zdarzeniu z pierwszej kolekcji: reset
(ponieważ programista sześć miesięcy później nie zauważył połączenia).
Teraz, gdy pierwsza kolekcja zostanie zresetowana, poruszony model zostanie zniszczony. Ups!
Iteracja nad kolekcją prawdopodobnie jest najlepszym sposobem na poradzenie sobie z tym problemem, jeśli nie masz punktu końcowego w swoim interfejsie API, który usunie wszystkie obiekty w kolekcji wsadowej na serwerze API (co często jest obsługiwane) .
szczęście, że iteracja jest całkiem proste:
destroyAll: function() {
var promises = [];
while(this.models.length > 0) {
promises.push(this.models[0].destroy());
}
// handle errors communicating with the server
$.when(promises).fail(function (response) {
this.trigger('syncError',
response);
}.bind(this));
}
nie zastępują lub zmienić metody lub właściwości podkreślenia-prefiksem. Zobacz moją odpowiedź, poniżej dla wyjaśnienia. –