2012-05-05 4 views
20

Ich habe folgende Coffeescript-Code zu generieren und Warnfeld:Funktionen aufrufen, die mit einem Kaffee-Skript definiert wurden?

(function() { 
    var show_alert; 

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

}).call(this); 

in meinem html Ich habe folgendes

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

jedoch keine Warnung:

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

, die kompiliert Box zeigt? Im Folgenden ist der HTML vom Browser kopiert:

<!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> 

Warum bin ich nicht in der Lage eine Warnung zu erhalten zu zeigen?

Antwort

22

Ihr Problem ist, dass der generierte JavaScript-Code in einem anderen Bereich ist. Sie müssen dieses Problem lösen , indem entweder die -b Parameter an den Coffeescript-Compiler Hinzufügen oder exportieren Sie Ihre Funktion explizit über

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

Weitere Informationen über den Export und den Umfang Ausgabe einen Blick auf https://stackoverflow.com/a/4215132/832273

I erstellt ein working jsfiddle mit dem obigen Code Coffee

4

in Ihrem coffeescrpt Code, versuchen die Funktion Fenster zu speichern: window["show_alert"] = show_alert

+1

JFTR ich denke 'root = Exporte? Dies; root.show_alert = show_alert' ist besser, anstatt direkt auf das Fenster zuzugreifen. Siehe http://Stackoverflow.com/a/4215132/832273 für Details –

+0

@mru, in der Tat, danke – akonsu

+0

@mru Javascript ist immer extrem verwirrend für mich. Gibt es eine bestimmte Referenzseite oder einen Text, den Sie entweder empfehlen würden? – rudolph9

-1

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

+0

Die Fragen bezogen sich auf Kaffee-Skript. – rudolph9

9

fand ich zwei Möglichkeiten, dieses Problem FIRST add @ vor Funktionsnamen zu lösen

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

SECOND am Ende der Kaffee-Datei hinzufügen

window["say_hi"] = say_hi 
Verwandte Themen