0

我不明白为什么 DOM 在集合视图渲染中没有更新:

类 FastTodo.Views.TodoItemsIndex 扩展 Backbone.View

  模板:JST['todo_items/index']

  埃尔:'#main'

  渲染:->
    $(@el).html @form_view.render()
    @collection.each @renderOne

  renderOne:(项目)->
    控制台日志(@)
    控制台日志(@el)
    $(@el).append "模型数据"

  初始化:->
    @collection = new FastTodo.Collections.TodoItems()
    @form_view = 新的 FastTodo.Views.AddTodoItem 集合:@collection
    @collection.bind '重置',=>
      @使成为()
    @collection.on 'add', (item) =>
      @renderOne(项目)
    @collection.fetch()

这个想法是#main 首先获取一个带有添加新表单的视图,然后将集合附加到#main。

我该怎么做?

控制台中视图的输出如下所示:填充的集合未呈现

4

1 回答 1

1

1)为了@collection.each @renderOne正常工作,您需要renderOne像这样将您的方法绑定到视图实例:(renderOne: (item) =>注意胖箭头),因为否则它会在全局上下文中调用(这就是您Window在控制台中看到这些对象的原因。

2) DOM 元素,而不是视图本身,应该被插入到 DOM 中,所以$(@el).html @form_view.render()应该写成@$el.html @form_view.render().el(该render方法应该根据骨干社区约定返回视图实例)。

其他看起来不错,它应该以这种方式工作。

您可能希望参考一些关于 js 中的上下文的帖子,以更深入地了解该主题(例如这个)。

顺便说一句,您可以为某些事情编写更少的代码。即这个

@collection.bind 'reset', =>
  @render()
@collection.on 'add', (item) =>
  @renderOne(item)

可以变成这个

@collection.on 'reset', @render
@collection.on 'add', @renderOne

但是在这种情况下,您应该记住将您的render方法与粗箭头绑定。

于 2013-03-03T15:35:36.547 回答