所以我有两个控制器,hotels
和videos
。我希望hotels.js.coffee
能够访问videos.js.coffee
中创建的函数,但我收到“未定义”错误。
我是CoffeeScript的新手,所以任何线索都会受到赞赏。
答案 0 :(得分:13)
CoffeeScript会将你的咖啡编译成包含在自动执行函数中的JS,其中包含窗口范围(function {})。call(this);
所以在videos.js.coffee中,您可以编写如下内容:
@getVideo: (id) ->
并且getVideo函数将绑定到窗口对象。
答案 1 :(得分:7)
CoffeeScript在匿名函数内运行,在同一文件中声明函数,不会导出为全局函数。
尝试这样的方法来声明全局函数:
window.myFunction = ->
//some code
答案 2 :(得分:3)
在编译期间,CoffeeScript将您的代码包装在匿名函数中并应用它。您必须以适合您环境的预期方式导出公共接口。
(exports || window).publicMethod = (foo, bar) -> foo + bar
然后,您需要在node.js中使用require()
并在浏览器中引用window
对象。
在浏览器中还有其他方法可以执行此操作。查看RequireJS。
答案 3 :(得分:0)
实际上,您可以使用顶级窗口变量,也可以使用通过CommonJS提供的exports对象。请注意,您还可以访问完整的控制器,而不仅仅是函数。
请参阅http://jashkenas.github.com/coffee-script/上的“Lexical Scoping and Variable Safety”和“text / coffeescript”脚本标签部分。