Чаплин /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 работает, хотя. Но я хочу, чтобы функция была вызвана событием "add" в коллекции.
Я также попытался вызвать событие вручную, добавив @collection.trigger "add" в цикле, который создает новые модели данных. Но это тоже не сработало.
Есть идеи, что я наблюдаю или делаю неправильно?
2 ответа
Стефан,
У меня были похожие проблемы, когда я пытался использовать хэш прослушивания для событий. Я решил настроить прослушиватель как таковой в методе инициализации представления.
@listenTo @Collection, 'add', @renderTodoList, @
-Hans
@stefan и @hans, это, несомненно, решило вашу проблему, но вы, ребята, не используете всю мощь представления коллекции чаплина. По умолчанию он обрабатывает любые изменения в коллекции. Если вы добавляете / удаляете / меняете новую модель, она перерисовывается сама, не нужно форсировать. найти док Чаплина здесь