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感到流利。