首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 3.1和Coffeescript中的“找不到变量”错误

Rails 3.1和Coffeescript中的“找不到变量”错误
EN

Stack Overflow用户
提问于 2011-05-22 18:46:42
回答 2查看 6K关注 0票数 23

我的应用程序中有引用我的application.js文件的视图,它包含我在整个应用程序中使用的函数。

在使用了Rails 3.1的边缘版本之后,我刚刚安装了Rails 3.1发布候选版本。在安装RC之前,我没有遇到任何问题,但是现在我得到了这个错误:

ReferenceError:找不到变量: indicator_tag

indicator_tag是我在application.js中定义的函数。我在javascript文件中注意到的唯一不同是,现在我的所有函数都封装在:

代码语言:javascript
复制
(function() { ... }).call(this);

我知道这是为了变范围吗?但这能阻止我的页面使用这些变量吗?在有人问之前,我已经确定了包含标记中的javascript路径是正确的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-22 19:34:40

默认情况下,每个CoffeeScript文件都被编译成一个闭包。除非将函数导出到全局变量,否则无法与来自其他文件的函数交互。我建议你这样做:

在每个coffeescript文件的顶部,添加一行如下

代码语言:javascript
复制
window.Application ||= {}

这将确保在任何时候都有一个名为Application的全局应用程序。

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

代码语言:javascript
复制
Application.indicator_tag = (el) ->
  ...

然后用

代码语言:javascript
复制
Application.indicator_tag(params)
票数 47
EN

Stack Overflow用户

发布于 2011-09-06 06:39:41

如果您有一个非常复杂的JS后端,Dogbert的解决方案是一个很好的方法。但是,如果您只使用了少数几个函数,那么有一个简单得多的解决方案。只需将它们直接添加到窗口对象中,如下所示:

代码语言:javascript
复制
window.indicator_tag = (el) ->
  ...

然后,您可以在任何地方使用您的函数,而不必将它们封装在另一个对象中。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6089992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档