2012-05-05 18 views
20

Mam następujący coffeescript kod do generowania i powiadomienie nadwozia:Funkcje wywołujące zdefiniowane za pomocą skryptu kawy?

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

który kompiluje do:

(function() { 
    var show_alert; 

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

}).call(this); 

w moim html Mam następujący

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

jednak żadnego alertu pokazuje pudełka? Poniżej przedstawiono kod HTML skopiowany z przeglądarki:

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

Dlaczego nie mogę wyświetlić okna alertu?

Odpowiedz

22

Twój problem polega na tym, że wygenerowany kod javascript znajduje się w innym zakresie. Trzeba rozwiązać ten albo przez dodanie parametru -b do coffeescript kompilatora lub wyeksportować swoją funkcję wyraźnie poprzez

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

Aby uzyskać więcej informacji na temat wywozu i zakres problemu spojrzeć na https://stackoverflow.com/a/4215132/832273

Stworzyłem working jsfiddle z powyższym kodem coffeescript

4

w kodzie coffeescrpt, spróbuj zapisać funkcję okna: window["show_alert"] = show_alert

+1

jftr myślę 'root = eksport? to; root.show_alert = show_alert' jest lepszy zamiast bezpośredniego dostępu do okna. Zobacz http://stackoverflow.com/a/4215132/832273 dla szczegółów –

+0

@mru, naprawdę, dziękuję – akonsu

+0

@mru javascript jest zawsze bardzo mylące dla mnie. Czy istnieje strona referencyjna lub tekst polecany przez Ciebie? – rudolph9

-1

<script type="text/javascript"> var show_alert; show_alert = function(){ alert("Hello,this is me!"); } </script> myślę, że to jest w porządku.

+0

Pytania dotyczyły scenariusza kawy. – rudolph9

9

znalazłem dwa sposoby, aby rozwiązać ten problem najpierw dodać @ przed nazwą funkcji

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

drugi na końcu pliku kawy dodać

window["say_hi"] = say_hi 
Powiązane problemy