我注意到如果我尝试像这样编译Coffeescript行:
$note.find('a.close').bind 'click', (event) =>
$(this).parent().remove()
$(this)
编译为$(_this)
,考虑到我正在使用=>
,这是有道理的。问题是,我不想在以后需要在此范围内使用局部变量时使用->
。
我必须用反引号转义第二行才能使$this
正确编译,àla:
`$(this).parent().remove()`
...还是有更好的方法?
更新(2012年7月12日):
我最终这样做了:
close = -> $note.remove()
$note.find('a.close').bind 'click', (event) ->
close()
setTimeout close, duration
我知道它完全避免使用this
,但这似乎比使用普通JS中开发的相同self = this
技巧更清晰的解决方案。
答案 0 :(得分:2)
要获取您点击的元素,您可以执行以下操作:
close_button = $(event.currentTarget) // equivalent to $(this) here
close_button.parent().remove()
-----或-----
that = @
$note.find('a.close').bind 'click', (event) ->
$(this).parent().remove()
that.anotherFunc()
但它并没有真正回答你的问题,但它是一个很好的选择。 我会在可能的情况下自己使用第一个解决方案。
答案 1 :(得分:1)
您真的想使用->
。 仅事物会发生变化,是该函数中this
(或@
)的值。如果您希望能够同时使用当前的this
和所需的this
,则需要将当前this
保留在不同的名称下
现在的代码:
$note.find('a.close').bind 'click', (event) ->
$(this).parent().remove()
如果您需要来自外部范围的this
,请输入代码:
that = this
$note.find('a.close').bind 'click', (event) ->
that.doSomething()
$(this).parent().remove()
答案 2 :(得分:0)
据我了解,您只需要缓存变量
that = @
context.action (e) ->
foo(that)