Backbone.js 如何为包含“添加新视图”的集合呈现项目视图?
我不明白为什么在集合视图渲染中不更新DOM: class FastTodo.Views.TodoItemsIndex extends Backbone.View template: JST['todo_items/index'] el: '#main' render: -> $(@el).html @form_view.render() @collection.each @renderOne renderOne: (item) -> console.log(@) console.log(@el) $(@el).append "model data" initialize: -> @collection = new FastTodo.Collections.TodoItems() @form_view = new FastTodo.Views.AddTodoItem collection: @collection @collection.bind 'reset', => @render() @collection.on 'add', (item) => @renderOne(item) @collection.fetch() 类FastTodo.Views.TodoItemsIndex扩展了主干.View 模板:JST['todo_items/index'] el:“#主要” 渲染:-> $(@el.html@form_view.render() @collection.each@renderOne renderOne:(项目)-> console.log(@) console.log(@el) $(@el).附加“模型数据” 初始化:-> @collection=new FastTodo.Collections.TodoItems() @form_view=new FastTodo.Views.AddTodoItem集合:@collection @collection.bind“重置”,=> @render() @集合。在“添加”时,(项目)=> @renderOne(项目) @collection.fetch() 其思想是#main首先使用addnewform获取视图,然后将集合附加到#main 我该怎么做 控制台中视图的输出如下所示:1)ForBackbone.js 如何为包含“添加新视图”的集合呈现项目视图?,backbone.js,coffeescript,Backbone.js,Coffeescript,我不明白为什么在集合视图渲染中不更新DOM: class FastTodo.Views.TodoItemsIndex extends Backbone.View template: JST['todo_items/index'] el: '#main' render: -> $(@el).html @form_view.render() @collection.each @renderOne renderOne: (item) -> console
@collection.each@renderOne
要正常工作,您需要将renderOne
方法绑定到视图实例,如下所示:renderOne:(item)=>
(请注意fat箭头),否则它将在全局上下文中调用(这就是您在控制台中看到这些窗口对象的原因
2) 应该将DOM元素而不是视图本身插入DOM,因此$(@el).html@form\u view.render()
应该写成@$el.html@form\u view.render().el
(render
方法应该根据主干社区约定返回视图实例)
其他的看起来不错,应该是这样的
您可能希望参考一些关于js中上下文的帖子,以便更深入地理解主题(例如)
顺便说一句,你可以为一些事情写更少的代码。例如,这个
@collection.bind 'reset', =>
@render()
@collection.on 'add', (item) =>
@renderOne(item)
会变成这样吗
@collection.on 'reset', @render
@collection.on 'add', @renderOne
但是,在本例中,您应该记住使用胖箭头绑定render
方法。谢谢!使用coffeescript的上下文绑定现在更清晰了