在Rails资产管道中,调用命名函数的正确方法是什么?

例如,如下所示,在同一个文件中调用命名函数似乎很正常。

#alerts.js.coffee
show_alert = (msg) ->
  alert(msg)

$(document).ajaxComplete (event, request) ->
  show_alert 'ajax completed'


但是从另一个coffee文件调用show_alert无效

例如与Jquery fileupload

#jquery_fileupload.js.coffee
jQuery ->
  $("#container").fileupload
    stop: (e, data) ->
      show_alert 'File upload stopped'


返回Uncaught ReferenceError: show_alert is not defined

毫无疑问,这是一个基本问题,但我希望您能提出一些建议。我不是javascript /咖啡专家,而且搜索显示“咖啡不支持命名函数”,因此我可能使用了错误的术语。我在这里应该参考什么?

最佳答案

Coffeescript会执行函数表达式,而不是函数定义。因此,您的coffeescript函数应出现在函数执行代码之前。

一种方法是将函数放在对象中,并在文档加载时执行它们。

#alert.js.coffee
window.MyHelperFunctions =
  show_alert: (msg) ->
    alert msg


#jquery_fileupload.js.coffee
jQuery ->
  $("#container").fileupload
    stop: (e, data) ->
      MyHelperFunctions.show_alert 'File upload stopped'

关于javascript - 在coffeescript中调用命名函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37806551/

10-14 15:53
查看更多