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

How to invoke coffeescript function from js.erb on Rails 3 and how to understand scope in Javascript

本文关键字:函数 何理解 中的 Javascript coffeescript erb Rails js 上从 调用      更新时间:2023-09-26

carts.js.coffee

$(document).ready ->
    add_book: () ->
        alert "hihi!!"

我试图调用 window.add_book(); 和 add_book();

add_to_cart.js.erb

但两者都行不通。

add_book();
window.add_book();

并且没有在Firebug或Webrick控制台上显示错误

顺便说一句,我无法理解

当变量或函数在

(function() {})

或者当函数被 {{ }} 所包含

({
add_book: function() {
return alert("poc123!!");
}
});

是否有任何教程或关键字术语可以让我找到相关资源?

提前致谢

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

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

所以简单的解决方法是,删除文档就绪,并直接调用函数。

我不确定您希望在函数中使用add_book:什么,但这肯定不是您想要的。这是为您的代码生成的 javascript:

$(document).ready(function() {
  return {
    add_book: function() {
      return alert("hihi!!");
    }
  };
});

您正在返回一个包含该函数的对象,但没有人可以访问它,因为它没有被任何人引用。

你想要的是一个变量,能够包含一个引用:

$(document).ready ->
    window.add_book = () ->
        alert "hihi!!"

现在,您可以在任何地方使用它(当然是在domready之后),直接调用add_book() .

如果你使用chrome,这个扩展可以帮助你发现coffeescript问题:它是一个实时shell,让你看到计算的js并运行coffeescript代码。

附带说明一下,我建议不要使用coffeescript,直到你对javascript感到流利。