【发布时间】:2011-09-04 00:23:25
【问题描述】:
所以我有两个控制器,hotels 和 videos。我希望hotels.js.coffee 能够访问在videos.js.coffee 中创建的函数,但出现“未定义”错误。
我是 CoffeeScript 新手,所以任何线索都将不胜感激。
【问题讨论】:
标签: coffeescript
所以我有两个控制器,hotels 和 videos。我希望hotels.js.coffee 能够访问在videos.js.coffee 中创建的函数,但出现“未定义”错误。
我是 CoffeeScript 新手,所以任何线索都将不胜感激。
【问题讨论】:
标签: coffeescript
在编译期间,CoffeeScript 将您的代码包装在一个匿名函数中并应用它。您必须以适合您环境的预期方式导出您的公共接口。
(exports || window).publicMethod = (foo, bar) -> foo + bar
然后您需要在 node.js 中使用 require() 并在浏览器中引用 window 对象。
在浏览器中还有其他方法可以做到这一点。查看RequireJS。
【讨论】:
CoffeScript 在匿名函数中运行,因此在同一文件中声明的函数不会导出为全局函数。
尝试这样声明全局函数:
window.myFunction = ->
//some code
【讨论】:
确实,您可以使用顶级窗口变量,或者通过 CommonJS 提供的导出对象。请注意,您还可以授予对完整控制器的访问权限,而不仅仅是函数。
请参阅http://jashkenas.github.com/coffee-script/ 上的“词法范围和变量安全”和“文本/咖啡脚本”脚本标签部分。
【讨论】:
CoffeeScript 会将您的咖啡编译成 JS,并包裹在一个具有窗口范围的自执行函数中 (function{}).call(this);
所以在 videos.js.coffee 中你可以这样写:
@getVideo: (id) ->
getVideo 函数将绑定到窗口对象。
【讨论】:
@hide_modal: (modal_id) -> animate_top = Number($('#' + modal_id).height() + 70) current_top = $('#' + modal_id).css('top') $('#' + modal_id).animate top: '-' + animate_top + 'px' 500 -> $(this).css({'top' : current_top, 'visibility': 'hidden'}); $('.reveal-modal-bg').fadeOut()