如何在Rails 3上从js.erb调用coffeescript函数以及如何理解Javascript中的作用域

如何在Rails 3上从js.erb调用coffeescript函数以及如何理解Javascript中的作用域,javascript,ruby-on-rails,ruby-on-rails-3,coffeescript,erb,Javascript,Ruby On Rails,Ruby On Rails 3,Coffeescript,Erb,咖啡车 $(document).ready -> add_book: () -> alert "hihi!!" 我已尝试调用window.add_book();并添加_book();在 将_添加到_cart.js.erb 但两者都不能起作用 add_book(); window.add_book(); Firebug或Webrick控制台上没有显示错误 顺便说一下,我不明白 变量或函数在中的含义是什么 (function() {}) 或者当函数被{{}包

咖啡车

$(document).ready ->
    add_book: () ->
        alert "hihi!!"
我已尝试调用window.add_book();并添加_book();在

将_添加到_cart.js.erb

但两者都不能起作用

add_book();
window.add_book();
Firebug或Webrick控制台上没有显示错误

顺便说一下,我不明白

变量或函数在中的含义是什么

(function() {})
或者当函数被{{}包含时

({
add_book: function() {
return alert("poc123!!");
}
});
是否有任何教程或关键词可以让我找到相关资源


提前感谢

我不确定在函数中使用
add\u book:
会得到什么,但这肯定不是您想要的。以下是为您的代码生成的javascript:

$(document).ready(function() {
  return {
    add_book: function() {
      return alert("hihi!!");
    }
  };
});
您正在返回一个包含函数的对象,但是没有人可以访问它,因为它没有被任何人引用

您需要的是一个变量,能够包含引用:

$(document).ready ->
    window.add_book = () ->
        alert "hihi!!"
现在,您可以在任何地方使用它(当然是在domready之后),直接调用
add\u book()

如果您使用chrome,可能会帮助您发现coffeescript问题:它是一个活动的shell,可以让您查看计算的js并运行coffeescript代码


另一方面,我建议在你熟练使用javascript之前不要使用coffeescript。

原因是你不能在js erb或coffee erb中使用
$(document).ready

当您通过Ajax交付此js erb时,文档已经准备好很长时间了。如果erb中的函数处于文档就绪状态,则永远不会有机会调用它们


因此,简单的解决方法是,删除文档并直接调用函数。

您将从这里@rubyst获得答案,这种情况不同。