Как я могу прикрепить обработчик событий для представления коллекции в Backbone.js при изменении одной из моделей? - PullRequest
0 голосов
/ 05 января 2012

У меня есть представление, которое отображает список задач:

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

но это не сработало.
Как я могу распространить событие, которое произошло на модели в дочернем представлении, на родительское представление?

1 Ответ

2 голосов
/ 05 января 2012

this.collection.bind('change', this.render) должен вызывать метод render при изменении статуса модели.

Можете ли вы добавить строку console.log('render called'); в ваш метод рендеринга, чтобы увидеть, вызывается ли она, когда статус моделиизменено.

Я думаю, что вызывается метод рендеринга, но в другом месте есть некоторая логика, которая неправильно отображает задачи.

...