简体   繁体   中英

Calling functions defined with coffee script?

I have the following coffeescript code to generate and alert box:

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

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

However, no alert box shows? The following is the html copied from the browser:

<!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. You have to solve this by either adding the -b parameter to the coffeescript compiler or export your function explicitly via

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

I created a working jsfiddle with the above coffeescript code

I found two ways to solve this issue FIRST add @ before function name

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

SECOND at the end of coffee file add

window["say_hi"] = say_hi

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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