我有一个呈现任务列表的视图:
ProjectManager.Views.TasksIndex = Support.CompositeView.extend({
initialize: function() {
_.bindAll(this, "render");
this.collection.bind("add", this.render);
},
render: function () {
this.renderTemplate();
this.renderTasks();
...
},
renderTemplate: function() {
$(this.el).html(JST['tasks/index']({ tasks: this.collection }));
},
renderTasks: function() {
var self = this;
this.collection.each(function(task) {
// only display draft tasks
if (task.get('status') === "draft") {
var taskItem = new ProjectManager.Views.TaskItem({ model: task });
self.renderChild(taskItem);
self.$('#tasks-list').append(taskItem.el);
}
});
}
....
});
我为集合中的每个任务呈现一个视图。我希望能够删除任务。
当用户单击任务的删除按钮后,我将任务模型上的状态属性设置为"已删除"。现在我需要在TasksIndex视图中绑定一个事件处理程序来重新呈现集合。
this.collection.bind("change", this.render);
但它没有工作。
如何将子视图中模型上发生的事件传播到父视图?
当模型状态发生变化时,this.collection.bind('change', this.render)
应调用render
方法。
你可以在你的渲染方法中添加一个console.log('render called');
行,看看当模型状态改变时它是否被调用。
我认为渲染方法正在被调用,但有一些逻辑在其他地方没有正确显示任务。