web-dev-qa-db-ja.com

Rails 3.1でJqueryクリックイベントをcoffeescriptに登録する方法

簡単そうに見えることをやろうとしていますが、どういうわけか私にはわかりません。次のように、tasks.jsファイルのリンクにクリックイベントを追加したいと思います。

$ ->
  $('.cancel_task').click -> 
    $('#task_form').toggle

これは次のようにレンダリングされます。

(function() {
  $(function() {
    return $('.cancel_task').click(function() {
    return $('#task_form').toggle;
  });
});
}).call(this);

私が欲しいのは次のようなものです:

$('.cancel_task').click(function()
{
  $('#task_form').toggle();
});

CoffescriptとRails 3.1スタックでこれを達成するにはどうすればよいですか?

16
Beau

コーヒーはあなたがすることすべてを限られた範囲で包むことになっているので、あなたは世界にグローバルを住まわせません。これは、持っていない限り、これを無視しないでください。トップレベルでは、this.something = "value"を使用してエクスポートできます。

パラメータがない場合、関数呼び出しには親が必要になるため、上記のコードは機能しません。これにより、2つの切り取りが機能的に同じになります。関数はJavaScriptの変数であるため、親なしの結果ではなく、その関数を返したいと想定しているだけです。

$ ->
  $('.cancel_task').click -> 
    $('#task_form').toggle()

最後に、Coffee関数は常に関数の最後の値を返します。それはまさにそれがどのように機能するかです。したがって、returnステートメントについて心配する必要はありません。結果はいつでも無視できます。

17
Travis

投稿した2番目のスニペットはcoffeeからの正しい出力であり、投稿した2番目と最後のスニペットは(実際には)機能的に同等です。必要に応じて、coffee--bareオプション(これは文書化されています)を使用してトップレベルのクロージャを取り除くことができますが、それ以外の場合は、問題が発生しない限り、CoffeeScriptの出力について心配する必要はありません。

1
Jordan Running