1

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 は呼び出されません。

ただし、 @initialize 関数から @renderTodoList を直接呼び出すと機能します。しかし、コレクションの「追加」イベントによって関数がトリガーされるようにします。

また、新しいデータ モデルを作成するループに @collection.trigger "add" を追加して、イベントを手動でトリガーしようとしました。しかし、これもうまくいきませんでした。

私が監督していること、または間違っていることについて何か考えはありますか?

4

2 に答える 2

1

ステファン、

イベントにリッスン ハッシュを使用しようとしたときに、同様の問題が発生しました。ビューの初期化メソッドで、リスナーをそのままセットアップすることにしました。

@listenTo @Collection, 'add', @renderTodoList, @

-ハンス

于 2014-07-28T20:14:10.930 に答える