【发布时间】:2013-07-11 21:12:25
【问题描述】:
我是 Backbone.js 新手。我只是在玩弄它。我想知道模型是否与视图相关。在提供的todos 示例中,我看到在 addOne 方法中,创建了一个新视图并将其与新创建的模型关联并附加。
window.AppView = Backbone.View.extend({
// view code
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
}
}
当我尝试做类似的事情时,我收到一条错误消息,提示“在未定义的情况下找不到绑定方法”。
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;
}
});
为了解决这个问题,我必须将新创建的模型作为参数传递给视图构造函数,并且我必须执行this.model = task 以便关联它。
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('');
}
});
但是 todos 示例中没有这样的内容。在 todos 示例中,新模型如何与新视图隐式关联?
谢谢
【问题讨论】:
-
你在哪里有
Task构造函数? -
在您对
this.model.bind的调用中,您需要传递正确的上下文。该模型在其上下文中使用this,因此您需要告诉它渲染视图而不是自身。this.model.bind('change', this.render, this);