tengo el siguiente escenario -actualizar una vista Backbone cuando el modelo se guarda
window.Wine = Backbone.Model.extend({
urlRoot: '/wines'
});
window.WineCollection = Backbone.Collection.extend({
model: Wine,
url: "/wines"
});
tengo un modelo y la colección respectiva definida.
window.WineListView = Backbone.View.extend({
el: '#wineList',
initialize: function() {
this.model.bind("reset", this.render, this);
this.model.bind("add", function (wine) {
alert("model added");
});
},
render: function (eventName) {
_.each(this.model.models, function (wine) {
$(this.el).append(new WineListItemView({
model: wine
}).render().el);
}, this);
return this;
}
});
window.WineListItemView = Backbone.View.extend({
tagName: "li",
initiliaze: function() {
this.render();
},
render: function (eventName) {
var template = _.template($('#wine-list-item').html());
$(this.el).html(template(this.model.toJSON()));
return this;
}
});
Las vistas anteriores crean un elemento de lista individual para cada modelo.
window.WineView = Backbone.View.extend({
el: $("#mainArea"),
initialize: function() {
this.render();
},
render: function (eventName) {
var template = _.template($("#wine-details").html(), {});
$(this.el).html(template);
},
events: {
"click #save_form": "save_form"
},
save_form: function() {
var wine = new Wine();
wine.save();
return false;
}
});
window.HeaderView = Backbone.View.extend({
el: '.header',
initialize: function() {
this.render();
},
render: function (eventName) {
var template = _.template($('#header').html());
$(this.el).html(template());
return this;
},
events: {
"click .new": "newWine"
},
newWine: function (event) {
var wine_View = new WineView();
wine_View.render();
}
});
En WineView, cuando se hace clic en el botón Enviar del formulario, se guarda el modelo. La función Backbone.sync está anulada.
var AppRouter = Backbone.Router.extend({
routes: {
"": "list"
},
list: function() {
this.wineList = new WineCollection();
this.wineListView = new WineListView({
model: this.wineList
});
this.wineList.fetch();
}
});
var app = new AppRouter();
Backbone.history.start();
var header = new HeaderView();
Mi preocupación es que, cuando el modelo se guarda el WineListView no llega renovado y mostrar el nuevo modelo que se ha agregado. Precisamente this.mode.bind ("add") no se invoca.
Pido disculpas por la verbosidad de la pregunta. Pero, esto me ha estado molestando por casi una semana. Cualquier ayuda es muy apreciada.
¡Salud!
Podría el error tipográfico "initiliaze" tener nada que ver con eso? –