1

Coffeescript の行を次のようにコンパイルしようとすると、次のようになることに気付きました。

$note.find('a.close').bind 'click', (event) =>
  $(this).parent().remove()

$(this)にコンパイルされます$(_this)。これは、私が を使用していることを考えると理にかなってい=>ます。->問題は、後でこのスコープでローカル変数を使用する必要がある場合に備えて、使用する必要がないということです。

$this正しくコンパイルするには、バッククォートで 2 行目をエスケープする必要があります。

`$(this).parent().remove()`

…またはもっと良い方法はありますか?

更新 (2012 年 7 月 12 日):

私はこれをやってしまった:

close = -> $note.remove()
$note.find('a.close').bind 'click', (event) ->
  close()
setTimeout close, duration

の使用を完全に回避していることはわかっていますが、プレーンな JS での開発でしばしば必要とthisなる同じトリックを使用するよりも、クリーンなソリューションのように思えます。self = this

4

3 に答える 3

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()

しかし、それはあなたの質問に本当に答えているわけではありませんが、良い代替手段です. 可能であれば、最初の解決策を自分で使用します。

于 2012-07-10T15:11:45.977 に答える
1

あなたは本当に使いたいです->。変更されるのは、その関数内の(または)の値だけです。あなたが現在持っているものとあなたが望むものの両方を使用できるようにしたい場合は、別の名前で現在の閉鎖を維持したいと思うでしょうthis@thisthisthis

今のコード:

$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()
于 2012-07-11T04:14:10.130 に答える
0

私が理解している限り、変数をキャッシュするだけで済みます

that = @

context.action (e) ->
  foo(that)
于 2012-07-10T19:57:32.623 に答える