Backbone.js模型来查看连接

我是一个Backbone.js新手。 我只是在玩它。 我想知道模型是否与View有关。 在提供的todos示例中,我看到addOne方法中创build了一个新的View,并将其与新创build的模型关联并添加。

window.AppView = Backbone.View.extend({ // view code addOne: function(todo) { var view = new TodoView({model: todo}); this.$("#todo-list").append(view.render().el); } } 

当我试图做类似的事情,我得到一个错误,说:“绑定方法不能find未定义”。

 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; } }); 

为了解决这个问题,我必须将新创build的模型作为parameter passing给视图构造函数,并且我需要执行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的例子,没有这样的东西。 新的模型如何隐式地与待办事例相关联?

谢谢

这根本不是隐含的,它在这里是明确的:

 var view = new TodoView({model: todo}); 

这是创build一个新的TodoView视图,并将其model属性设置为addOne函数的唯一参数( todo ,这是一个模型)。

无论何时将新模型添加到Todos集合中, addOne使用新模型作为参数调用addOne方法。

 Todos.bind('add', this.addOne); 

然后,在addOne ,为该模型创build一个新的视图,通过{model: todo}明确设置关系。 这是你从你的代码版本中缺less的,我怀疑。

你似乎试图做的是在视图的init函数中链接视图和模型,这很好,但是如果你这样做的话,你自己就可以了 – 这意味着你需要设置模型< – >查看关系(你已经通过将模型作为parameter passing给view init函数来解决这个问题)。