Я создаю тестовое приложение для себя, чтобы узнать больше о 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 «добавить» в цикл, который создает новые модели данных. Но и это не сработало.
Любые идеи, что я наблюдаю или делаю неправильно?