2012-05-09 75 views
3

考慮以下代碼脂肪箭頭「這個」範圍

_bindEvents: -> 
    @input.bind 'keyup', => 
    @filter($(this).val()) 
    if $this .val() is '' 
     @clearBtn.hide() 
    else 
     @clearBtn.show() 

很清楚,我認爲「@」代表「_this。」所以它引用了父範圍,但是如果我需要'內心這個'。

喜歡這一行:

@filter($(this).val()) 

編譯成這樣:

_this.filter($(_this).val()); // $(_this) 

,我需要這樣的:

_this.filter($(this).val()); // $(this) 

有沒有辦法做到這一點不使用細箭頭並使用closue(that = this)手動保存該引用?

回答

3

AFAIK沒有辦法做到這一點;我會警惕它的一對夫婦的原因:

  • 的易於理解:當您使用哈希火箭(=>),你就相當於告訴你所需要的讀/希望保留當前值爲this;重新引入第二個this混淆了這一點。

  • 未來的兼容性:從我的理解,未來的ECMAScript規範是支持=>的方式,它甚至不引入新的this。 (而且我也不會感到驚訝,如果直接的CoffeeScript採用了新的 箭頭時語法功能的土地)

細箭頭W /明確的引用將可能使事情到底有多清晰。

+0

謝謝,這使得很多的感覺:) – escusado

0

你總是可以破解這種使用嵌入的JavaScript:

`var second_this = this;` 
@filter($(second_this).val())