我的应用程序中有一些视图,它引用了我的application.js文件,其中包含我在整个应用程序中使用的函数.
在使用3.1的边缘版本之后,我刚刚安装了Rails 3.1版本候选版本.直到我安装RC我没有任何问题,但现在我收到此错误:
ReferenceError:找不到变量:indicator_tag
indicator_tag是我在application.js中定义的函数.我在javascript文件中注意到的唯一区别是现在我的所有函数都包含在:
(function() { ... }).call(this);
Run Code Online (Sandbox Code Playgroud)
我理解这是针对变量范围的吗?但它可能阻止我的页面使用这些变量吗?在有人要求之前,我确保我的include标签中的javascript路径是正确的.
使用Rails 3.1(rc5),我注意到我包含rails(或sprockets)的任何coffeescript文件正在添加初始化javascript的顶部和底部.换句话说,一个空白的.js.coffee文件输出如下:
(function() {
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这很烦人,因为它搞砸了我的javascript范围(除非我真的不知道我在做什么).我通常将我的所有javascript类分成单独的文件,我相信将这些函数代码包装成我的类只会使它们彼此超出范围.或者,至少,我似乎无法访问它们,因为我不断得到未定义的错误.
有没有办法覆盖这个?似乎sprockets中的这个文件与添加这段代码有关:https: //github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb
我知道将函数中的所有内容包装起来似乎是一种额外的便利,因为在加载DOM之前没有任何东西可以运行,但据我所知,它只是弄乱了我的范围.