2012-11-22 20 views
13

Czytałem i czytałem dokumenty na temat tych dwóch metod, ale z mojego życia nie mogę się domyślić, dlaczego możesz użyć jednego z nich zamiast drugiego.BackboneJS collection.reset() vs collection.fetch()

Czy ktoś mógłby podać mi podstawową sytuację w kodzie, w którym jeden byłby aplikacją, a drugi nie.

Odpowiedz

27

reset ustawia kolekcja z szerokim wachlarzem modeli, które należy podać:

collection.reset([ { name: "model1" }, { name: "model2" } ]); 

fetch pobiera dane kolekcji z serwer, używając adresu URL określonego dla kolekcji.

collection.fetch({ url: someUrl, success: function(collection) { 
    // collection has values from someUrl 
} }); 

Here's a Fiddle illustrating the difference.

+0

Taki dobry, zwięzłe, pełne odpowiedź dziękuję :) – benhowdle89

+0

ta odpowiedź nie jest kompletna. czy zresetować zapis na wszystkich istniejących modelach w kolekcji czy co? –

+0

@AlexMills tak, kasuje, a następnie ustawia – McGarnagle

1

Reset() służy do zamiany kolekcji na nową. Na przykład:

@collection.reset(@full_collection.models) 

byłoby załadować @full_collections modele, jednak

@collection.reset() 

wróci pustą kolekcję. Funkcja fetch() zwraca domyślną kolekcję modelu

3

Zakładamy, że przeczytałeś documentation, w przeciwnym razie będzie to trochę mylące.

Jeśli spojrzeć na dokumentację fetch i reset, co mówi jest, załóżmy, że podałeś własność collectionurl - które mogą być skierowane do pewnego kodu serwera, a powinien zwrócić json tablicę models, a ty chcesz, aby collection został wypełniony zwracanym models, użyjesz fetch.

Na przykład istnieją następujące JSON zwracane z serwera na URL kolekcji:

[{ 
    id : 1, 
    name : "a" 
}, { 
    id : 2, 
    name : "b" 
}, { 
    id : 3, 
    name : "c" 
}] 

co stworzy 3 modele w swojej kolekcji po pomyślnym pobierania. Jeśli polujesz na kod collection fetchhere zobaczysz, że pobieranie spowoduje odpowiedź i wewnętrznie zadzwoni pod numer reset lub add na podstawie podanych opcji.

Powracając do dyskusji, reset zakłada, że ​​mamy już json of models, które chcemy przechowywać w kolekcji, przekazujemy jako parametr do niego. W twoim życiu, jeśli chcesz zaktualizować kolekcję i masz już modele po stronie klienta, nie musisz używać fetch, reset wykonasz swoją pracę.

Stąd, jeśli chcesz tego samego json być wypełnione kolekcji za pomocą resetu można zrobić coś takiego:

var _self = this; 
$.getJSON("url", function(response) { 
    _self.reset(response); // assuming response returns the same json as above 
}); 

dobrze, to nie jest to praktyka, których należy przestrzegać, aby ten scenariusz fetch jest lepszy, jego właśnie użyto na przykład.

Kolejny przykład resetu znajduje się na stronie documentation.

Nadzieję daje trochę pomysłu i sprawia, że ​​życie lepiej :)

Powiązane problemy