21

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

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>

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

4

3 回答 3

23

您的问题是生成的 javascript 代码在另一个范围内。您必须通过将-b参数添加到咖啡脚本编译器或通过显式导出函数来解决此问题

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

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

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

于 2012-05-05T05:01:38.143 回答
11

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

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

SECOND 在咖啡文件末尾添加

window["say_hi"] = say_hi
于 2014-06-09T11:31:24.900 回答
4

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

于 2012-05-05T04:42:34.263 回答