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函数来解决这个问题)。