Backbone.js-Sammlungen rufen nach dem Abrufvorgang kein "Reset" -Ereignis auf
-
29-10-2019 - |
Frage
Bei der Anforderung einer data.json
-Datei zum Auffüllen der Sammlung mit den folgenden Daten
[{
"Id": "BVwi1",
"Name": "Bag It",
"AverageRating": 4.6,
"ReleaseYear": 2010,
"Url": "http://www.netflix.com/Movie/Bag_It/70153545",
"Rating": "NR"
}, {
"Id": "BW1Ss",
"Name": "Lost Boy: The Next Chapter",
"AverageRating": 4.6,
"ReleaseYear": 2009,
"Url": "http://www.netflix.com/Movie/Lost_Boy_The_Next_Chapter/70171826",
"Rating": "NR"
}]
Collection ruft das Ereignis "Zurücksetzen" nicht wie in der Dokumentation angegeben auf.Ich kann sehen, dass die Anfrage und die Antwort nach der Abrufmethode korrekt sind, aber nichts passiert.Unten ist der Code für meine App. Router, der startet, ist alles
Theater.Router = Backbone.Router.extend({
routes: {
"": "defaultRoute"
},
defaultRoute: function () {
Theater.movies = new Theater.Collections.Movies()
new Theater.Views.Movies({
collection: Theater.movies
});
Theater.movies.fetch();
}
})
var appRouter = new Theater.Router();
Backbone.history.start();
die Sammlung
Theater.Collections.Movies = Backbone.Collection.extend({
model: Theater.Models.Movie,
url: "scripts/data/data.json",
initialize: function () {}
});
Ansicht, die das Rücksetzereignis abonniert
Theater.Views.Movies = Backbone.View.extend({
initialize: function () {
_.bindAll(this, "render", "addOne");
this.collection.bind("reset", this.render);
this.collection.bind("add", this.addOne);
},
render: function(){
console.log("render")
console.log(this.collection.length);
},
addOne: function (model) {
console.log("addOne")
}
})
Referenzseite
http://bardevblog.wordpress.com/2012/01/16 / verständnis-backbone-js-einfaches-beispiel /
Lösung
Ich hatte ein ähnliches Problem. Ich hoffe, dass meine Antwort für andere von Nutzen ist.Zuerst war meine data.json
-Datei ungültig.Dann stellte sich heraus, dass ich die folgende Codezeile übersehen hatte:
Theater.Models.Movie = Backbone.Model.extend({}
Durch Hinzufügen dieser Codezeile wurde das Problem für mich behoben.
Andere Tipps
Sie sollten Backbone anweisen, den Reset beim Abrufen auszulösen, indem Sie beim Abrufen ab Backbone 1.0 {reset: true} übergeben.
Ersetzen:
Theater.movies.fetch()
Mit
Theater.movies.fetch({reset :true})
Möglicherweise liegt ein Problem mit Ihrem Abruf vor, wenn die Sammlung nicht gefüllt wird.Unter dieser Antwort erfahren Sie, wie Sie einen Fehlerbehandler an den Abrufvorgang übergeben.
Ich habe das gleiche Problem .. und habe es behoben durch:
youColloection.fetch({reset: true});