0

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 控制台上没有显示错误

顺便说一句,我无法理解

当vars或functions in时是什么意思

(function() {})

或者当 {{ }} 包含函数时

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

有没有教程或关键词可以让我找到相关资源?

提前致谢

4

2 回答 2

2

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

当你通过 Ajax 传递这个 js erb 时,文档已经准备好很长时间了。如果您的 erb 中的函数在文档准备就绪状态下,它们将永远不会有机会被调用。

所以简单的解决方法是,删除准备好的文档,然后直接调用函数。

于 2013-10-30T11:10:05.970 回答
0

我不确定您期望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。

于 2013-10-30T11:10:00.877 回答