Javascript jQuery使用Rails/Coffeescript绑定事件?

Javascript jQuery使用Rails/Coffeescript绑定事件?,javascript,ruby-on-rails,coffeescript,Javascript,Ruby On Rails,Coffeescript,因此,在app/assets/javascript/faye.js.coffee.erb中,我有以下内容: $('#room_tag').bind('blur', () -> alert('Hey!') ) 其中的所有其他代码,例如:sendmessage('room','message')都可以正常工作。我可以复制并粘贴上面代码块生成的代码,然后粘贴到Chrome中,效果很好。我认为这是因为,它是rails还是coffeescript?它们中的任何一个都将整个文件包装到: (fu

因此,在app/assets/javascript/faye.js.coffee.erb中,我有以下内容:

$('#room_tag').bind('blur', () ->
   alert('Hey!')
)
其中的所有其他代码,例如:
sendmessage('room','message')
都可以正常工作。我可以复制并粘贴上面代码块生成的代码,然后粘贴到Chrome中,效果很好。我认为这是因为,它是rails还是coffeescript?它们中的任何一个都将整个文件包装到:

(function() {
  // your generated code here
}).call(this);
还有,是否有一种方法可以让我访问其中定义的方法?是否可以在其中定义方法而不将其分配给变量?

1)很可能是您的
.bind
调用在文档准备就绪之前执行得太快,因此它没有做任何事情。在调用
$(document)时将其包装起来。像这样准备好了吗

    $(document).ready ->
      $('#room_tag').bind 'blur', ->
        alert 'Hey!'
实际上有一个可爱的快捷方式,因为jQuery的默认
$
函数是
$(文档)的别名。准备好了
,您只需执行以下操作:

$ ->
  $('#room_tag').bind 'blur', ->
    alert 'Hey!'
2) 正是coffeescript将所有内容封装在一个自执行函数定义中

3) 如果要在coffeescript中生成全局函数,请将其显式指定为全局窗口对象的属性

    window.myFunc = (arg1) ->
      alert arg1

2) &3)在

中有清楚的解释,我不知道,我只是看到了这个,然后。。。想要一些咖啡…这个问题的第二部分基本上是重复的,请看我的答案,解释包装的用途。(虽然在本例中,包装器并没有引起问题,正如Peter在回答中所说。)从CoffeeScript应用的CoffeeScript文档中,通常的警告是:内联脚本将在闭包包装器中运行,因此如果您想公开全局变量或函数,请将它们附加到窗口对象。
确切地说,听起来这里的答案是#1。您可以通过选中
$(“#房间标签”).length来确认这一点。如果是
1
,则该元素在选择时存在;如果是
0
,则不是。