2012-05-09 15 views
3

はそれが「@」を表していると私には明らかだ。このコード脂肪矢印「この」スコープ

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

を考えてみましょう「_this」。親スコープを参照するので、 'inner this'が必要な場合はどうしますか?

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

はこれにコンパイルされます:

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

と私は、この必要があります。この行のよう

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

は細い矢印を使用せずにそれを行う方法はありますクローズ(this = this)を使用してこの参照を手作業で保存しますか?

答えて

3

AFAIKこれを行う方法はありません。そして、私はカップルの理由のため、それに対して警告します:

が安心・オブ・理解
  • :あなたはハッシュロケット(=>)を使用、あなたが効果的にあなたが必要とする読者を言っている/保存したいです現在の値はthisです。もう一度紹介してください。thisはそれを混乱させます。

  • 将来の互換性:私の理解から、次のECMAScript仕様では、それも新しいthisを導入しないような方法で=>をサポートすることです。 (時に、その機能の土地のCoffeeScriptが直接新しい 矢印構文を採用した場合と、私は驚かないだろう)

明示的な参照/ wの細い矢印は、おそらく最終的に物事をより明確になります。

+0

おかげで、多くの意味になります:) – escusado

0

あなたは、常にこの使用して埋め込まれたJavaScriptハックすることができます

`var second_this = this;` 
@filter($(second_this).val()) 
関連する問題