Las colecciones de Backbone.js no invocan el evento "Reset" después de la operación de recuperación
-
29-10-2019 - |
Pregunta
Al solicitar el archivo data.json
para la colección de población que tiene por debajo de los datos
[{
"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"
}]
La colección no invoca el evento "Restablecer" ya que la documentación dice que debería.Puedo ver la solicitud y la respuesta es correcta después del método de búsqueda, pero no pasa nada.A continuación se muestra el código para mi aplicación. Enrutador que comienza todo
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();
la colección
Theater.Collections.Movies = Backbone.Collection.extend({
model: Theater.Models.Movie,
url: "scripts/data/data.json",
initialize: function () {}
});
Ver que se suscribe al evento de reinicio
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")
}
})
Sitio de referencia
http://bardevblog.wordpress.com/2012/01/16 / Comprensión-Backbone-JS-Simple-Ejemplo /
Solución
Tuve un problema similar, espero que mi respuesta sea de alguna utilidad para otros.Al principio, mi archivo data.json
no era válido.Luego resultó que pasé por alto la siguiente línea de código:
Theater.Models.Movie = Backbone.Model.extend({}
Agregar esta línea de código resolvió el problema.
Otros consejos
Debes decirle a Backbone que active el reinicio al recuperar pasando {reset: true} al recuperar a partir de Backbone 1.0
Reemplazar:
Theater.movies.fetch()
Con
Theater.movies.fetch({reset :true})
Puede haber un problema con la recuperación si la colección no se está completando.Consulte esta respuesta para ver cómo pasar un controlador de errores a la operación de recuperación.
Tengo el mismo problema ... y lo solucioné:
youColloection.fetch({reset: true});