2013-03-26 79 views
0

当我在写剧本的咖啡我倾向于这样做非常多的(伪代码):胖箭头重复?

$link.click (e) => 
    this._clicked(e) 

难道真的不能在透明的CoffeeScript绑定某种方式?我希望能够做到:

$link.click =this._clicked 

或东西,这会约束我的this._clicked方法,直接将事件,保持其this指针

什么想法?

更新

_clicked将被定义为:

_clicked: (e) -> 
    # some code 
+0

但是'_clicked'函数没有定义胖箭头?这可能是问题所在。 – Bergi 2013-03-26 12:50:38

+0

哦..我甚至不知道我能做到这一点?功能定义上的胖箭头 - 我会看看这个! – 2013-03-26 12:58:50

+0

Bergi,给我一个答案,我会接受:) – 2013-03-26 13:00:35

回答

2

没什么特别与CoffeeScript的。只要做到

$link.click @_clicked 

,然后定义_clicked

_clicked: (e) => 
    # some code 

它会通过this._clicked作为处理程序的link click事件。

您可以像这样传递任何函数作为回调。关键是不执行该功能(@_clicked中没有()()。 JS中的函数是一个普通变量,可以作为参数传递给其他函数。

随着

$link.click -> 

你只是传递函数来.click直接而不存储它到变量中。

为了保持this你要么define @_clicked with a fat arrow或使用JavaScripts bind function,返回的this绑定到一个特定值的函数。

CoffeeScript不向JavaScript添加任何额外的功能。 Fat箭头只是在链接(如果在类的方法定义中使用它)中执行与bind函数类似的绑定,或者仅在功能内定义函数时使用var _this = this技巧。

+0

这不是我的意思,虽然它的一个好点的你可以使用@_clicked函数,而不是这个。我只是总是将它看作是一个实例变量(我知道函数是,但它只是感觉不同,来自ruby) – 2013-03-26 12:56:11

+0

我已经更新了我的答案,以尊重这个绑定。 – ohcibi 2013-03-26 13:00:15