2
在Rails资产管道中,调用命名函数的正确方法是什么?在coffeescript中调用命名函数的正确方法是什么?
例如,在同一个文件中调用一个命名的函数,如下所示,看起来很完美。
#alerts.js.coffee
show_alert = (msg) ->
alert(msg)
$(document).ajaxComplete (event, request) ->
show_alert 'ajax completed'
但从另一个咖啡文件调用show_alert不起作用
#jquery_fileupload.js.coffee
jQuery ->
$("#container").fileupload
stop: (e, data) ->
show_alert 'File upload stopped'
回报Uncaught ReferenceError: show_alert is not defined
毫无疑问,一个基本的问题,但我希望得到一些指点。我不是javascript/coffescript专家,搜索显示“coffeescript不支持命名函数”,所以我可能使用了错误的术语。我应该在这里引用什么?
'alert.js.coffee'必须在'jquery_fileupload.js.coffee'之前加载。你在做那个吗? – Kumar
感谢@KumarAbinash,这很有道理。在部署期间,Rails将单个的coffeescript文件编译成一个JS文件。有没有办法调用不依赖于命令的“命名函数”? –
[“尽管在本文档中为了清楚起见而被压缩,所有的CoffeeScript输出都被包装在一个匿名函数中:'(function(){...})()';这个安全包装器与var关键字的自动生成相结合,使得偶然污染全球命名空间变得非常困难。“](http://coffeescript.org/#lexical-scope)。你希望'@show_alert = ...'或'window.show_alert = ...'将其推入全局名称空间或使用自己的名称空间。这是重复的,但我的搜索 - 傅今天早上似乎很弱。 –