如何在 Rails 3 上从 js.erb 调用 coffeescript 函数以及如何理解 Javascript 中的
How to invoke coffeescript function from js.erb on Rails 3 and how to understand scope in Javascript
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感到流利。
相关文章:
- 理解typescript中的构造函数接口
- 函数hide()、prev()、show()被组装以获得所需的结果,但无法理解其工作原理
- 理解AngularJS函数$arguments
- 无法理解函数's的行为
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- javascript中的命名函数与未命名函数以及理解分配
- 雄辩的Javascript:无法理解在sum函数中如何确定数字值
- 无法通过将参数传递给 Javascript 函数来理解行为
- 我需要一些帮助来理解JavaScript中的对象文字函数
- 可以'我不理解为什么使用JavaScript void函数
- 理解函数原型和__proto__
- 试图理解JavaScript中原型和构造函数之间的区别
- 通过私有函数和自执行函数来理解JavaScript
- 需要说明:无法理解返回函数的javascript
- 使用JavaScript理解匿名函数
- 试图理解一个在JS中有两个参数输入的函数(如函数X(param1)(param2))
- javascript中的返回函数,理解作用域&闭包
- 学习回调函数:尝试理解不同形式的回调
- 递归偶数函数的理解问题(Javascript)
- Javascript FileReader readAsText函数不理解utf-8编码字符,如ä和& # 2