Soy un novato de Backbone.js. Solo estaba jugando con eso. Me gustaría saber si el modelo está relacionado con la Vista. En el ejemplo proporcionado todos, veo en el método addOne, se crea una nueva Vista y se asocia con el modelo recién creado y se agrega.Backbone.js Modelo para ver la conexión
window.AppView = Backbone.View.extend({
// view code
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
}
}
Cuando traté de hacer algo similar, que tiene un error que dice "método de enlace no se puede encontrar en indefinido".
window.TodoView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render', 'close');
this.model.bind('change', this.render); // I got the error at this place.
this.model.view = this;
}
});
Para solucionar esto, tiene que pasar el modelo recién creado como un parámetro a la vista constructor y que tiene que ver this.model = task
finde para asociarlo.
window.TodoView = Backbone.View.extend({
initialize: function(task) {
_.bindAll(this, 'render', 'close');
this.model = task
this.model.bind('change', this.render);// now there is no error
this.model.view = this;
}
});
window.AppView = Backbone.View.extend({
insertTask:function(){
var newTask, newTaskView;
newTask = new Task(JSON.parse(xhr));
Tasks.create(newTask);
newTaskView = new TaskView({ model: newTask });
$("#todo_list").append(newTaskView.render().el);
this.input.val('');
}
});
Pero el ejemplo de todos, no tiene algo así. ¿Cómo está el nuevo modelo asociado con la nueva vista implícitamente en el ejemplo de todos?
Gracias
¿Dónde tienes 'Task' constructor? –
En su llamada a 'this.model.bind', necesita pasar el contexto correcto. El modelo usa 'this' en su contexto, por lo que necesita decirle que represente la vista y no a sí mismo. 'this.model.bind ('change', this.render, this);' –