CoffeeScript有一个方便的do
语句来保存闭包中的变量。但是,如何使用this
保留do
的属性?这似乎总是失败。
示例:在类方法中,我想使用jQuery将事件处理程序附加到HTML元素。处理程序应该使用参数调用同一个类的另一个方法。现在,如果我写:
foo = getBar()
$('div').click -> @handler foo
这显然不起作用,因为该函数将在没有名为handler
的方法的不同上下文中执行。但是,如果我使用do
并且我写了这个:
foo = getBar()
do (@handler, foo) ->
$('div').click -> @handler foo
也会失败,因为@handler会转换为不会通过闭包的this.handler。什么是解决这个问题的优雅方法?
答案 0 :(得分:1)
尝试使用fat arrow(等号)
foo = getBar()
$('div').click => @handler foo
或者,在回调之前获取对处理程序的引用。
cbHandler = @handler
foo = getBar()
$('div').click -> cbHandler foo