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 = ...'將其推入全局名稱空間或使用自己的名稱空間。這是重複的,但我的搜索 - 傅今天早上似乎很弱。 –