Domanda

Sono stato a guardare CoffeeScript e non sto a capire come si potrebbe scrivere codice come questo. Come maneggia nidificato funzioni anonime nella sua sintassi?

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

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

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

          });

          $(function() {
            app.run()
          });
        })(jQuery);
È stato utile?

Soluzione

in realtà non compilarlo, ma questo dovrebbe funzionare

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

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

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

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

Altri suggerimenti

La risposta di Matt è corretta, ma qui è un metodo alternativo:

In CoffeeScript 1.0 (rilasciato poche settimane dopo questa domanda è stata posta), un operatore di do è stata introdotta che esegue la funzione che immediatamente lo segue. E 'in gran parte utilizzato per catturare le variabili in loop, in quanto

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

(che passa un riferimento x nella funzione anonima) comporta diversamente rispetto

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

In quest'ultimo caso, semplicemente uscita l'ultima voce arr più volte, dal momento che c'è una sola x.

In ogni caso, si deve essere consapevoli di do come un modo di gestire una funzione anonima, senza le parentesi in più, anche se le sue capacità per quanto riguarda l'argomento-passaggio sono un po 'limitato in questo momento. Ho sollevato una proposta di ampliare le .

Al momento, l'equivalente del tuo esempio codice sarebbe

do ->
  $ = jQuery
  ...

Se la mia proposta viene accettata, sarà possibile scrivere

do ($ = jQuery) ->
  ...

, invece.

Breve variante

do ($=jQuery)->
 app = $.sammy ->
   @get '#/', -> $("#main").text ''
   @get '#/test', -> $('#main').text 'Hello world'
 $ -> app.run()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top