Basierend auf der offiziellen Dokumentation unter Verwendung holen, wenn ich so etwas tun:Aktualisieren eine Sammlung mit Rückgrat
collection.fetch({update: true, remove: false})
ich ein „add“ Ereignis für jedes neues Modell zu bekommen, und einen „change“ -Ereignis für jeden das bestehende Modell geändert, ohne etwas zu entfernen.
Warum, wenn ich eine statische Datenquelle aufruft (die URL der Sammlung gibt immer dasselbe json zurück), wird für jedes empfangene Element ein add-Ereignis aufgerufen.
Hier einige Code (ich bin Rendering nichts, ich bin das Debuggen nur):
<!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>
Heres die 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);
Grundsätzlich hole ich die Sammlung der default verwenden, ist es wird mit allen Modellen und Attributen korrekt abgerufen.
Und wenn ich auf den Refresh-Link klicke, rufe ich refreshView auf, was im Grunde versucht, die Sammlung mit neuen Modellen zu aktualisieren. Was ich nicht verstehe ist, warum, wenn die Antwort die gleiche ist, alle Modelle der Sammlung als neu erkannt werden, ein hinzufügen?
Heres a functional link: Öffnen Sie die Konsole und Sie werden sehen, wie die Add-Ereignisse aufgerufen werden, wenn Sie auf Aktualisieren klicken, auch wenn die Sammlung identisch ist.
Danke für Ihre Hilfe.
ja, es war das Problem. Danke für Ihre Hilfe. – DiegoDevelopero
Hallo zusammen .. Ich habe alle meine Modelle, Sammlungen und Ansichten im '$ (document) .ready();' Ich benutze auch den Backbone.router.extend. Wenn ich die aktuelle Seite aktualisiere, bleibt sie auf der aktuellen Seite. Keine Probleme damit .. Aber bei der Aktualisierung werden die Modelle und die Sammlungen wieder zurückgesetzt .. und dann ist es leer .. so kann ich nicht abrufen, was ich zuvor in der Sammlung gespeichert habe. Was soll ich machen? –