2

在 rails 3.1 中使用 coffeescript、jQuery 和 sprockets,coffeescript 文件被编译成如下块:

(function() {
 var a;
 var b;
 var c;
 foo = function() { 
  alert("foo");
 }
 bar = function() {
  alert("bar");
 }

}).call(this);

这似乎将函数 foo 和 bar 移出全局范围,因此 bar 可以由 foo 调用,但不能从 html 代码中调用。当我尝试从 select onchange 元素中调用 foo 时,我得到一个“找不到变量:foo”。

现在的解决方法是将所有全局可用的函数移动到 .js 文件中。但是这样做的正确方法是什么?

谢谢

4

1 回答 1

5

我更喜欢声明一个顶级对象(用于命名空间),并将我需要访问的所有函数附加到它。

在文件的顶部,添加类似

window.App = window.App || {};

然后声明你的函数

var foo = function() { ... };
var bar = function() { ... };

最后,需要导出功能

window.App.foo = foo;

一些相关信息 - Rails 3.1 和 Coffeescript 出现“找不到变量”错误

于 2011-07-13T20:40:55.270 回答