调用用coffee脚本定义的函数?

时间:2021-02-01 18:29:19

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

我有以下的coffecript代码来生成和警告框:

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?

为什么我找不到提示框?

4 个解决方案

#1


22  

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

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

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://*.com/a/4215132/832273

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

I created a working jsfiddle with the above coffeescript code

我使用上面的coffeescript代码创建了一个工作的jsfiddle

#2


10  

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

#3


4  

in your coffeescrpt code, try to save the function to window: window["show_alert"] = show_alert

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

#4


-1  

<script type="text/javascript"> var show_alert; show_alert = function(){ alert("Hello,this is me!"); } </script> I think this is ok.

< script type = " text / javascript " > var show_alert;函数(){alert(“Hello,this is me!”);} 我认为这样可以。

#1


22  

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

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

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://*.com/a/4215132/832273

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

I created a working jsfiddle with the above coffeescript code

我使用上面的coffeescript代码创建了一个工作的jsfiddle

#2


10  

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

#3


4  

in your coffeescrpt code, try to save the function to window: window["show_alert"] = show_alert

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

#4


-1  

<script type="text/javascript"> var show_alert; show_alert = function(){ alert("Hello,this is me!"); } </script> I think this is ok.

< script type = " text / javascript " > var show_alert;函数(){alert(“Hello,this is me!”);} 我认为这样可以。