Проблема Chaplin/Backbone — событие добавления не запускается при добавлении элемента в коллекцию

Я создаю тестовое приложение для себя, чтобы узнать больше о coffeescript, Backbone, Brunch.io и Chaplin JS, но я застрял и не могу понять, что я делаю неправильно.

Это мой код в todo-view.coffee:

View = require 'views/base/view'
TodoItemView = require 'views/todo/todo-item'
TodoItemModel =  require 'models/todo/todo-item-model'
TodoItemCollection = require 'models/todo/todo-collection'

# Site view is a top-level view which is bound to body.
module.exports = class TodoView extends View

  # Template data stuff
  container: 'todo-container'
  tagName: 'ul'
  className: 'todo-list'
  template: require './templates/todo'

  # Create a custom initialize method
  initialize: ->
    super

    # Create a new Backbone Collection with some dummy data to store
    @collection = new TodoItemCollection() 

    # Store the dummy data in the collection
    data = ["working", "studying", "gym", "sleep"]
    for todoItem in data 
      @collection.add( new TodoItemModel({ item: todoItem }) )

    # Render the view
    @render()

  # Listen to data events
  listen: 
    "add collection": "renderTodoList"

  # When the template is initialized we need to load
  # all the list items and append them to the container
  renderTodoList: ->

    # Loop over all the items
    for model in @collection.models
      todoItemView = new TodoItemView({ container: @$el, model: model })

Проблема в том, что прослушиватель событий (установленный в объекте прослушивателя) не запускается. Таким образом, @renderTodoList не вызывается.

Однако вызов @renderTodoList непосредственно из функции @initialize работает. Но я хочу, чтобы функция запускалась событием «добавить» в коллекции.

Я также пытался вызвать событие вручную, добавив @collection.trigger «добавить» в цикл, который создает новые модели данных. Но и это не сработало.

Любые идеи, что я наблюдаю или делаю неправильно?


person Stefan    schedule 23.08.2013    source источник
comment
В TodoView. Коллекция также привязана к TodoView.   -  person Stefan    schedule 24.08.2013


Ответы (2)


Стефан,

У меня были похожие проблемы, когда я пытался использовать хэш прослушивания для событий. Я решил настроить прослушиватель как таковой в методе инициализации представления.

@listenTo @Collection, 'добавить', @renderTodoList, @

-Ганс

person Hans    schedule 28.07.2014
comment
Давно у меня была эта проблема. С моими текущими знаниями я могу подтвердить, что это решение. Спасибо! - person Stefan; 29.07.2014

@stefan и @hans, это, без сомнения, решило вашу проблему, но вы, ребята, не используете возможности просмотра коллекции Чаплина. По умолчанию он обрабатывает любые изменения в коллекции. Если вы добавите/удалите/измените новую модель, она перерисует себя, не нужно заставлять. документ Чаплин здесь

person Narendra Singh    schedule 14.03.2016