其他js无法提供coffee-file中的函数

时间:2013-10-12 17:28:49

标签: grails coffeescript scope coffeescript-resources

我尝试在Grails项目中使用coffeescript。为了实现这个目标,我决定使用coffeescript-resources插件。但是在结果视图中编译的咖啡看起来如下:

(function() {
    var someFunc;
    someFunc = function() {
       return alert("hello");
    };
}).call(this); 

在这种情况下,我不能称之为。我没有在插件文档中找到任何正确的配置,以避免在编译coffee-file时使用匿名函数。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

来自fine manual

  

词汇范围和可变安全性
  [...]
  虽然为了清楚起见在本文档中进行了抑制,但所有CoffeeScript输出都包含在一个匿名函数中:(function(){ ... })();此安全包装器与自动生成var关键字相结合,使得污染全局命名空间变得非常困难不小心。

     

如果您要为其他要使用的脚本创建顶级变量,请将它们作为属性添加到窗口或CommonJS中的 exports 对象上。 存在运算符(如下所述)为您提供了一种可靠的方法来确定添加它们的位置;如果您同时定位CommonJS和浏览器:exports ? this

因此,存在自调用函数包装器以防止您污染全局命名空间。如果你想把东西放到全局命名空间中,那么你必须明确地把它放在那里;在浏览器中,您可以使用以下方式执行此操作:

window.someFunc = -> alert('hello')

@someFunc = -> alert('hello')

@someFunc表单假定您位于范围的顶部(即不在另一个函数或类中)。

或者,您可以找到一种使用--bare编译CoffeeScript的方法:

  

-b, --bare
  在没有顶级功能安全包装器的情况下编译JavaScript。