简体   繁体   English

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

[英]Calling functions defined with coffee script?

I have the following coffeescript code to generate and alert box: 我有以下coffeescript代码来生成和警告框:

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

which compiles to: 编译为:

(function() {
  var show_alert;

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

}).call(this);

in my html I have the following 在我的HTML中我有以下内容

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

However, no alert box shows? 但是,没有显示警告框? The following is the html copied from the browser: 以下是从浏览器复制的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>

Why am I not able to get an alert box to show up? 为什么我无法显示警报框?

Your problem is that the generated javascript code is in another scope. 您的问题是生成的JavaScript代码在另一个范围内。 You have to solve this by either adding the -b parameter to the coffeescript compiler or export your function explicitly via 您必须通过将-b参数添加到coffeescript编译器或通过显式导出函数来解决此问题

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

For more information about the exporting and scope issue have a look at https://stackoverflow.com/a/4215132/832273 有关导出和范围问题的更多信息, 查看https://stackoverflow.com/a/4215132/832273

I created a working jsfiddle with the above coffeescript code 我用上面的coffeescript代码创建了一个有效的jsfiddle

I found two ways to solve this issue FIRST add @ before function name 我找到了两种方法来解决这个问题FIRST在函数名之前添加@

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

SECOND at the end of coffee file add 在咖啡文件末尾添加第二个

window["say_hi"] = say_hi

在你的coffeescrpt代码中,尝试将该函数保存到window: window["show_alert"] = show_alert

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM