簡體   English   中英

調用用咖啡腳本定義的函數?

[英]Calling functions defined with coffee script?

我有以下coffeescript代碼來生成和警告框:

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>

為什么我無法顯示警報框?

您的問題是生成的JavaScript代碼在另一個范圍內。 您必須通過將-b參數添加到coffeescript編譯器或通過顯式導出函數來解決此問題

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

有關導出和范圍問題的更多信息, 查看https://stackoverflow.com/a/4215132/832273

我用上面的coffeescript代碼創建了一個有效的jsfiddle

我找到了兩種方法來解決這個問題FIRST在函數名之前添加@

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

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

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