【问题标题】:jQuery bind events with Rails/Coffeescript?jQuery 使用 Rails/Coffeescript 绑定事件?
【发布时间】:2011-08-28 22:31:08
【问题描述】:

所以在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);

还有一种方法可以让我访问其中定义的方法吗?是否可以在其中定义方法而不将其分配给变量?

【问题讨论】:

  • 我不知道,我刚看到这个并且...想喝杯咖啡...
  • 这个问题的第二部分基本上是 stackoverflow.com/questions/5211638/… 的副本,请参阅我的回答,解释包装器的用途。 (尽管在这种情况下,包装器并没有引起问题,正如彼得在他的回答中所说的那样。)

标签: javascript ruby-on-rails coffeescript


【解决方案1】:

1) 您的.bind 调用很可能在文档准备好之前执行得太快,因此它什么也不做。像这样将其包装在对$(document).ready 的调用中

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

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

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

2) 将所有内容包装在自执行函数定义中的是咖啡脚本。

3) 如果你想在coffeescript中做一个全局函数,显式地将它赋值为全局窗口对象的一个​​属性

    window.myFunc = (arg1) ->
      alert arg1

2) & 3) 在CoffeeScript docs中有明确的解释

【讨论】:

  • 来自咖啡文档The usual caveats about CoffeeScript apply — your inline scripts will run within a closure wrapper, so if you want to expose global variables or functions, attach them to the window object.
  • 没错,听起来#1 就是这里的答案。您可以通过检查$('#room_tag').length 来确认这一点。如果是1,则该元素在选择时存在;如果是0,则不是。
猜你喜欢
  • 2014-06-29
  • 2012-05-23
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2011-12-01
  • 2011-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多