Na podstawie oficjalnej dokumentacji, gdy robię coś takiego:Aktualizacja kolekcji korzystając pobrać ze szkieletem
collection.fetch({update: true, remove: false})
otrzymuję „Dodaj” zdarzenie dla każdego nowego modelu, a „zmiana” zdarzenie dla każdego zmienił istniejący model, bez usuwania czegokolwiek.
Dlaczego, jeśli wywołuję statyczne źródło danych (adres URL kolekcji zawsze zwraca ten sam json), zdarzenie add jest wywoływane dla każdego otrzymanego przedmiotu?
Oto niektóre kodu (nie mam nic renderowania, ja tylko debugowanie):
<!doctype html>
<html>
<head>
<title>Example</title>
</head>
<body>
<a href="#refresh">Refresh</a>
<script src="js/jquery-1.8.3.min.js"></script>
<script src="js/underscore-min.js"></script>
<script src="js/backbone-min.js"></script>
<script src="js/main.js"></script>
</body>
</html>
Herezje JS
(function($){
//Twitter Model
ModelsTwitt = Backbone.Model.extend({});
//Twitter Collection
CollectionsTwitts = Backbone.Collection.extend({
model:ModelsTwitt,
initialize:function(){
console.log('Twitter App Started');
},
url:'data/195.json'
});
//Twitts View
ViewsTwitts = Backbone.View.extend({
el:$('#twitter-list'),
initialize:function(){
_.bindAll(this, 'render');
this.collection.bind('reset',this.render);
this.collection.bind('add',this.add);
},
render:function(){
console.log("This is the collection",this.collection);
},
add:function(model){
console.log("add event called",model);
}
});
//Twitter Router
Router = Backbone.Router.extend({
routes:{
'':'defaultRoute',//Default list twitts route
'refresh':'refreshView'
},
defaultRoute:function(){
this.twitts = new CollectionsTwitts();
new ViewsTwitts({collection:this.twitts});
this.twitts.fetch();
},
refreshView:function(){
this.twitts.fetch({update:true,remove:false});
}
});
var appRouter = new Router();
Backbone.history.start();
})(jQuery);
Zasadniczo sprowadzić kolekcję używając defaultroute, to jest poprawnie pobierany ze wszystkimi modelami i atrybutami.
Po kliknięciu odnośnika odświeżam, wywoływam refreshView, który zasadniczo próbuje zaktualizować kolekcję nowymi modelami. Nie rozumiem, dlaczego jeśli odpowiedź jest taka sama, wszystkie modele kolekcji są wykrywane jako nowe, powodując dodanie add?
Heres a functional link: otwórz konsolę, a zobaczysz, jak zdarzenia dodawania są wywoływane po kliknięciu przycisku Odśwież, nawet jeśli kolekcja jest taka sama.
Dzięki za pomoc.
tak, to był problem. Dzięki za pomoc. – DiegoDevelopero
Witam. Mam wszystkie moje modele, kolekcje i widoki w '$ (document) .ready();' Używam również Backbone.router.extend. Ilekroć odświeżam bieżącą stronę, pozostaje ona na bieżącej stronie. Żadnych problemów z tym .. Ale po odświeżeniu modele i kolekcje są resetowane ponownie ... a następnie puste ... więc nie mogę pobrać, co wcześniej zapisałem w kolekcji. Co powinienem zrobić? –