我的应用程序中有一些视图,它引用了我的application.js文件,其中包含我在整个应用程序中使用的函数。
我在使用3.1的边缘版本后刚刚安装了Rails 3.1候选版本。在我安装RC之前我没有遇到任何问题,但现在我收到了这个错误:
ReferenceError:找不到变量:indicator_tag
indicator_tag是我在application.js中定义的函数。 我在javascript文件中注意到的唯一区别是现在我的所有函数都包含在:
(function() { ... }).call(this);
我理解这是针对变量范围的吗?但它可能阻止我的页面使用这些变量吗?在有人要求之前,我确保我的包含标签中的javascript路径是正确的。
答案 0 :(得分:47)
默认情况下,每个CoffeeScript文件都会编译成一个闭包。除非将它们导出到全局变量,否则无法与其他文件中的函数进行交互。我建议做这样的事情:
在每个coffeescript文件的顶部,添加一行
window.Application ||= {}
这将确保始终存在全局命名的应用程序。
现在,对于您需要从另一个文件调用的每个函数,将它们定义为
Application.indicator_tag = (el) ->
...
并使用
调用它们Application.indicator_tag(params)
答案 1 :(得分:12)
如果你有一个非常复杂的JS后端,Dogbert的解决方案是一个很好的方法。但是,如果您只使用了一些功能,那么有一个更简单的解决方案。只需将它们直接添加到窗口对象中,如下所示:
window.indicator_tag = (el) ->
...
然后,您可以在任何地方使用您的函数,而无需将它们包装在另一个对象中。