Rails 3.1和Coffeescript“找不到variables”错误

我在我的应用程序的意见,引用我的application.js文件,其中包含我在我的应用程序中使用的函数。

我刚刚安装了3.1版本的Rails 3.1版本后, 直到我安装了RC,我没有任何问题,但现在我得到这个错误:

ReferenceError:找不到variables:indicator_tag

indicator_tag是我在application.js中定义的一个函数。 我注意到在JavaScript文件中唯一的区别是,现在我的所有function都被封装在:

(function() { ... }).call(this); 

我明白这是为了variables范围? 但是,它可以防止我的网页使用这些variables? 而之前有人问,我已经确保在我的包含标签的JavaScriptpath是正确的。

默认情况下,每个CoffeeScript文件都被编译成一个闭包。 除非将其导出到全局variables,否则不能与来自其他文件的函数进行交互。 我build议做这样的事情:

在每个咖啡文件的顶部,添加一行

 window.Application ||= {} 

这将确保有一个全球命名的应用程序在任何时候存在。

现在,对于需要从另一个文件调用的每个函数,将它们定义为

 Application.indicator_tag = (el) -> ... 

并打电话给他们使用

 Application.indicator_tag(params) 

如果你有一个非常复杂的JS后端,Dogbert的解决scheme是一个好方法。 然而,如果你只有less数几个你正在使用的函数,那么就有一个更简单的解决scheme。 只需将它们直接添加到窗口对象,如下所示:

 window.indicator_tag = (el) -> ... 

然后,您可以从任何地方使用您的function,而无需将其包装在另一个对象中。