在coffeescript中调用命名函数的正确方法是什么?

时间:2016-06-14 08:17:04

标签: javascript ruby-on-rails coffeescript

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

例如,在同一个文件中调用命名函数,如下所示,似乎完美无缺。

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

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

但是从另一个咖啡文件调用show_alert不起作用

e.g。与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 / coffescript专家,搜索发现" coffeescript不支持命名函数"所以我可能使用了错误的术语。我应该在这里引用什么?

1 个答案:

答案 0 :(得分:1)

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'