当其中一个模型发生变化时,我如何在Backbone.js中为集合视图附加事件处理程序?



我有一个呈现任务列表的视图:

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');行,看看当模型状态改变时它是否被调用。

我认为渲染方法正在被调用,但有一些逻辑在其他地方没有正确显示任务。

相关内容

  • 没有找到相关文章

最新更新