2010-11-12 24 views
27

He estado buscando en CoffeeScript y no entiendo cómo escribiría un código como este. ¿Cómo maneja las funciones anónimas anidadas en su sintaxis?Sintaxis de funciones anónimas en CoffeeScript

;(function($) { 
      var app = $.sammy(function() { 

      this.get('#/', function() { 
       $('#main').text(''); 
      }); 

      this.get('#/test', function() { 
       $('#main').text('Hello World'); 
      }); 

      }); 

      $(function() { 
      app.run() 
      }); 
     })(jQuery); 
+4

El [sitio web CoffeeScript] (http://jashkenas.github.com/coffee-script/) tiene una característica * Trate CoffeeScript *, que compila a JavaScript sobre la marcha. Pude descubrir la respuesta en unos minutos jugando con eso. –

Respuesta

41

sin compilar, pero esto debería funcionar

(($) -> 
    app = $.sammy -> 

    this.get '#/', -> 
     $('#main').text '' 

    this.get '#/test', -> 
     $('#main').text 'Hello World' 

    $(-> 
    app.run() 
) 
)(jQuery); 
+0

Muchas gracias muchachos – Handloomweaver

+11

Dado que coffeescript automáticamente envuelve el código en una función anónima de todos modos, puede simplemente poner '$ = jQuery' en la parte superior de su archivo y eliminar la llamada de una función anónima con jQuery como parámetro. –

+2

sí, estaba haciendo una línea para el puerto de línea de su código –

34

respuesta de Matt es correcta, pero aquí es un método alternativo:

En CoffeeScript 1.0 (lanzado unas semanas después de esta se planteó la pregunta), se introdujo un operador do que ejecuta la función que le sigue inmediatamente. Es sobre todo usado para la captura de las variables en los bucles, ya que

for x in arr 
    do (x) -> 
    setTimeout (-> console.log x), 50 

(que pasa una referencia a x en la función anónima) se comporta de manera diferente que

for x in arr 
    setTimeout (-> console.log x), 50 

Este último simplemente salida de la última entrada en arr repetidamente , ya que solo hay un x.

De todos modos, debe tener en cuenta do como una forma de ejecutar una función anónima sin los paréntesis adicionales, aunque sus capacidades con respecto a la transferencia de argumentos son un poco limitadas en este momento. Levanté un proposal to broaden them.

Actualmente, el equivalente a su ejemplo de código sería

do -> 
    $ = jQuery 
    ... 

Si se acepta mi propuesta, será posible escribir

do ($ = jQuery) -> 
    ... 

lugar.

+0

Este método es realmente bueno, ya que contabiliza la filosofia coffeescript no requiere ningún paréntesis de cierre –

4

variante corta

do ($=jQuery)-> 
app = $.sammy -> 
    @get '#/', -> $("#main").text '' 
    @get '#/test', -> $('#main').text 'Hello world' 
$ -> app.run() 
Cuestiones relacionadas