Backbone - 绑定到集合的重置事件会丢失对`this`的引用

时间:2011-12-28 20:08:10

标签: scope backbone.js coffeescript

我不认为这是一个不常见的问题,但我无法做出任何我找到的解决方案。这是我的[简化]视图:

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属性)。

2 个答案:

答案 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基于idtagNameclassName设置的内容(由主干本身)创建。