Inizio con Backbone.js e sto provando a creare la mia prima app di esempio - la lista della spesa.Backbone.js - il metodo di recupero non si attiva l'evento di reset
Il mio problema si verifica quando richiamo la raccolta di elementi, probabilmente l'evento di reset non viene attivato, quindi il metodo di rendering non viene chiamato.
Modello:
Item = Backbone.Model.extend({
urlRoot : '/api/items',
defaults : {
id : null,
title : null,
quantity : 0,
quantityType : null,
enabled : true
}
});
Collezione: vista
ShoppingList = Backbone.Collection.extend({
model : Item,
url : '/api/items'
});
listino:
ShoppingListView = Backbone.View.extend({
el : jQuery('#shopping-list'),
initialize : function() {
this.listenTo(this.model, 'reset', this.render);
},
render : function (event) {
// console.log('THIS IS NEVER EXECUTED');
var self = this;
_.each(this.model.models, function (item) {
var itemView = new ShoppingListItemView({
model : item
});
jQuery(self.el).append(itemView.render().el);
});
return this;
}
});
Lista voce:
ShoppingListItemView = Backbone.View.extend({
tagName : 'li',
template : _.template(jQuery('#shopping-list-item').html()), // set template for item
render : function (event) {
jQuery(this.el).html(this.template(this.model.toJSON()));
return this;
}
});
Router: iniziare
var AppRouter = Backbone.Router.extend({
routes : {
'' : 'show'
},
show : function() {
this.shoppingList = new ShoppingList();
this.shoppingListView = new ShoppingListView({
model : this.shoppingList
});
this.shoppingList.fetch(); // fetch collection from server
}
});
Applicazione:
var app = new AppRouter();
Backbone.history.start();
Dopo caricamento della pagina, collezione di oggetti è correttamente scaricati dal server, ma il rendering il metodo di ShoppingListView non viene mai chiamato. Cosa sto facendo di sbagliato?
Anche se non sei d'accordo con il suo schema, qui non c'è niente di sbagliato. Il suo * modello * è una collezione, ok, ma il suo punto di vista lo ascolta. Non vedo davvero dove stai andando. – Loamhoof
@Loamhoof hm, buona cattura.Ho aggiornato la mia risposta –
Grazie mille! '{reset: true}' era la chiave del mio problema. – chr1s