调用咖啡脚本定义的函数?

Posted

技术标签:

【中文标题】调用咖啡脚本定义的函数?【英文标题】:Calling functions defined with coffee script? 【发布时间】:2012-05-14 14:12:32 【问题描述】:

我有以下咖啡脚本代码来生成和警告框:

show_alert = () ->
  alert("Hello! I am an alert box!")

编译为:

(function() 
  var show_alert;

  show_alert = function() 
    return alert("Hello! I am an alert box!");
  ;

).call(this);

在我的 html 中,我有以下内容

<input onclick='show_alert()' type='button' value='Show alert box' />

但是,没有显示警告框?以下是从浏览器复制的html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <title>Test Rails Application</title>
    <style type='text/css'>.application h1 
  color: lime; 
</style>
    <script type='text/javascript'>(function() 
  var show_alert;

  show_alert = function() 
    return alert("Hello! I am an alert box!");
  ;

).call(this);
</script>
  </head>
  <body>
    <h1>Hello from applicaiton.html.haml</h1>
    <div class='application'><h1>Hello World</h1>
<input onclick='show_alert()' type='button' value='Show alert box' />
</div>
  </body>
</html>

为什么我无法显示警报框?

【问题讨论】:

【参考方案1】:

我找到了两种方法来解决这个问题 首先在函数名前加@

@say_hi = () ->
  $(alert('Hello!!!'))

在咖啡文件末尾添加第二个

window["say_hi"] = say_hi

【讨论】:

【参考方案2】:

您的问题是生成的 javascript 代码在另一个范围内。你必须解决这个问题 通过将-b 参数添加到coffeescript 编译器或导出您的函数 明确地通过

root = exports ? this
root.show_alert = () -> alert("Hello! I am an alert box!")

有关导出和范围问题的更多信息,请查看https://***.com/a/4215132/832273

我用上面的咖啡脚本代码创建了一个working jsfiddle

【讨论】:

【参考方案3】:

在您的咖啡脚本代码中,尝试将函数保存到窗口:window["show_alert"] = show_alert

【讨论】:

jftr 我认为root = exports ? this; root.show_alert = show_alert 比直接访问窗口更好。详情见***.com/a/4215132/832273 @mru javascript 总是让我非常困惑。你们有没有推荐的具体参考网站或文字? @KurtRudolph 取决于您要查找的内容,但请查看 developer.mozilla.org/en/JavaScript 谢谢,感谢您的帮助。

以上是关于调用咖啡脚本定义的函数?的主要内容,如果未能解决你的问题,请参考以下文章

咖啡脚本:使用“构造”字符串调用方法

咖啡脚本中的 switch case 语句

CoffeeScript 未定义

从html文件中的coffeescript文件调用函数[重复]

在一个python脚本中调用另一个python脚本中的函数

拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中