2010-11-12 10 views
27

J'ai regardé CoffeeScript et je ne comprends pas comment vous écrirez du code comme ça. Comment gère-t-il les fonctions anonymes imbriquées dans sa syntaxe?Syntaxe des fonctions anonymes dans CoffeeScript

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

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

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

      }); 

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

Le [site CoffeeScript] (http://jashkenas.github.com/coffee-script/) a une * Essayez CoffeeScript * La fonction, qui compile JavaScript à la volée. J'ai été capable de comprendre la réponse dans quelques minutes en jouant avec elle. –

Répondre

41

ne compile pas réellement, mais cela devrait fonctionner

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

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

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

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

Merci beaucoup les gars – Handloomweaver

+11

Puisque coffeescript encapsule automatiquement le code dans une fonction anonyme de toute façon, vous pouvez simplement mettre $ = jQuery en haut de votre fichier et supprimer l'appel d'une fonction anonyme avec jQuery en paramètre. –

+2

ouais, était juste en train de faire une ligne pour le port de ligne de son code –

34

La réponse de Matt est correct, mais voici une méthode alternative:

Dans CoffeeScript 1.0 (publié quelques semaines après question a été posée), un opérateur do a été introduit qui exécute la fonction qui le suit immédiatement. Il est surtout utilisé pour capturer les variables dans les boucles, depuis

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

(qui passe une référence à x dans la fonction anonyme) se comporte différemment

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

Ce dernier sera tout simplement la sortie de la dernière entrée dans arr à plusieurs reprises , puisqu'il n'y en a qu'un seul x. Quoi qu'il en soit, vous devez connaître do pour exécuter une fonction anonyme sans les parenthèses supplémentaires, bien que ses capacités en termes de passage d'argument soient un peu limitées pour le moment. J'ai soulevé un proposal to broaden them.

Actuellement, l'équivalent de votre exemple de code serait

do -> 
    $ = jQuery 
    ... 

Si ma proposition est acceptée, il sera possible d'écrire

do ($ = jQuery) -> 
    ... 

à la place.

+0

Cette méthode est vraiment sympa, car la prise en compte de la philosofie coffeescript ne nécessite pas de parenthèses de fermeture –

4

variante courte

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