¿Funciones de llamada definidas con script de café?

Tengo el siguiente código de coffeescript para generar y alertar el cuadro:

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

que comstack a:

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

en mi html tengo el siguiente

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

Sin embargo, ¿no se muestra el cuadro de alerta? El siguiente es el html copydo del 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> 

¿Por qué no puedo get un cuadro de alerta para que aparezca?

Su problema es que el código javascript generado está en otro ámbito. Tienes que resolver esto agregando el parámetro -b al comstackdor coffeescript o exportar tu function explícitamente a través de

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

Para get más información sobre el problema de export y scope, consulte https://stackoverflow.com/a/4215132/832273.

Creé un jsfiddle de trabajo con el código coffeescript anterior

Encontré dos forms de resolver este problema PRIMERO add @ before function name

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

SEGUNDO al final del file de café agregar

 window["say_hi"] = say_hi 

en su código de coffeescrpt, intente save la function en la window: window["show_alert"] = show_alert

<script type="text/javascript"> var show_alert; show_alert = function(){ alert("Hello,this is me!"); } </script> <script type="text/javascript"> var show_alert; show_alert = function(){ alert("Hello,this is me!"); } </script> Creo que esto está bien.