jQuery用Rails / Coffeescript绑定事件?

时间:2011-05-19 14:14:26

标签: javascript ruby-on-rails coffeescript

所以在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 个答案:

答案 0 :(得分:29)

1)在文档准备好之前,很可能你的.bind调用过早执行,因此它没有做任何事情。将它包裹在$(document).ready这样的呼叫中

    $(document).ready ->
      $('#room_tag').bind 'blur', ->
        alert 'Hey!'

实际上有一个可爱的快捷方式,因为jQuery的默认$函数是$(document).ready的别名,你可以这样做:

$ ->
  $('#room_tag').bind 'blur', ->
    alert 'Hey!'

2)coffeescript将所有内容包装在一个自动执行的函数定义中。

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

    window.myFunc = (arg1) ->
      alert arg1

2)& 3)在CoffeeScript docs

中有清楚的解释