我不认为这是一个不常见的问题,但我无法做出任何我找到的解决方案。这是我的[简化]视图:
class MyView extends Backbone.View
el: '#mydiv'
initialize: ->
@collection.bind 'reset', @render, @
render: ->
$(@el).html('my content')
触发reset
时,render
的{{1}}已被破坏,this
为@el
。我的理解是undefined
上的第3个参数应该用来处理这个问题,但这似乎并没有发生。我使用的是Backbone 0.5.3。
我也尝试在渲染上使用“胖箭头”,但这也不起作用:
bind
更新
正如Trevor Burnham在下面指出的那样,这不是一个范围问题,而是我的 render: =>
$(@el).html('my content')
属性在页面加载时不可用(后来创建它)。我仍然在寻找一种更好的方法来处理它(使用视图上的el
属性)。
答案 0 :(得分:2)
我不认为问题是在错误的上下文中调用render
,而是视图的el
属性永远不是DOM元素。在您致电mydiv
时,是否存在ID为new MyView
的内容?如果没有,那就是问题。
在内部,当el
是一个字符串时,Backbone会进行调用
this.el = $(this.el).get(0);
来自视图的构造函数。如果没有与该选择器字符串匹配的内容,则@el
将为undefined
,这就是您所看到的内容。
答案 1 :(得分:0)
在定义=>
方法时,请使用双箭头->
而不是单箭头render
,而CoffeeScript会确保this
指针指向类实例。此外,您可能希望尝试将id
成员设置为id引用而不是el
成员,作为主干的文档(http://documentcloud.github.com/backbone/#View -el)表示el
基于id
,tagName
和className
设置的内容(由主干本身)创建。