如何在rails 3.1上使用coffeescript注册Jquery click事件

Bea*_*eau 16 javascript ruby-on-rails coffeescript

我想做的事似乎应该很简单,但出于某种原因让我望而却步.我想在我的tasks.js文件中添加一个click事件,如下所示:

$ ->
  $('.cancel_task').click -> 
    $('#task_form').toggle
Run Code Online (Sandbox Code Playgroud)

这表示为:

(function() {
  $(function() {
    return $('.cancel_task').click(function() {
    return $('#task_form').toggle;
  });
});
}).call(this);
Run Code Online (Sandbox Code Playgroud)

我想要的只是:

$('.cancel_task').click(function()
{
  $('#task_form').toggle();
});
Run Code Online (Sandbox Code Playgroud)

我如何使用coffescript和rails 3.1堆栈实现这一目标?

Tra*_*vis 17

咖啡应该包含你在有限范围内所做的一切,这样你就不会用全局变量来填充世界.这是有用的,除非你有,不要忽略这一点.在顶层,您可以使用this.something = "value".

现在你的代码不起作用,因为函数调用在没有参数时需要一个paren.这将使两个剪辑 - 它在功能上相同.函数是JavaScript中的变量,因此它假设您想要返回该函数而不是没有parens的结果.

$ ->
  $('.cancel_task').click -> 
    $('#task_form').toggle()
Run Code Online (Sandbox Code Playgroud)

最后,Coffee函数始终返回函数的最后一个值.这就是它的工作原理.所以不要担心return语句,你可以随时忽略结果.


Jor*_*ing 1

您发布的第二个片段是 的正确输出coffee,并且您发布的第二个和最后一个片段(实际上)在功能上是等效的。coffee如果你愿意,你可以通过使用's选项(这是有文档记录的)来摆脱顶级闭包,--bare但否则你不应该担心 CoffeeScript 的输出,除非它给你带来了问题。