Question

J'ai regardé CoffeeScript et je ne comprends pas comment vous écrire du code comme celui-ci. Comment sont gérés imbriquée fonctions anonymes dans sa syntaxe?

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

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

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

          });

          $(function() {
            app.run()
          });
        })(jQuery);
Était-ce utile?

La solution

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);

Autres conseils

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

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

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

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

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

Cette dernière sera tout simplement la sortie de la dernière entrée dans arr à plusieurs reprises, car il n'y a qu'une seule x.

Quoi qu'il en soit, vous devez être conscient de do comme un moyen d'exécution d'une fonction anonyme sans les parenthèses supplémentaires, mais sont un peu limité au moment de ses capacités en ce qui concerne à passer des arguments. J'ai soulevé une proposition les élargir .

À l'heure actuelle, l'équivalent de votre exemple de code serait

do ->
  $ = jQuery
  ...

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

do ($ = jQuery) ->
  ...

au lieu.

variante courte

do ($=jQuery)->
 app = $.sammy ->
   @get '#/', -> $("#main").text ''
   @get '#/test', -> $('#main').text 'Hello world'
 $ -> app.run()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top