Frage

Ich habe mich unter Coffee und verstehe ich nicht, wie Sie Code wie diesen schreiben. Wie funktioniert es handle in seiner Syntax anonyme Funktionen verschachtelt?

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

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

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

          });

          $(function() {
            app.run()
          });
        })(jQuery);
War es hilfreich?

Lösung

hat es nicht wirklich kompilieren, aber das sollte funktionieren

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

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

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

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

Andere Tipps

Matts Antwort ist richtig, aber hier ist eine alternative Methode:

In Coffeescript 1.0 (veröffentlicht ein paar Wochen nach dieser Frage gestellt wurde), wurde ein do Operator eingeführt, dass läuft die Funktion, die unmittelbar folgt. Es ist vor allem für die Erfassung Variablen in Schleifen verwendet, da

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

(die einen Bezug auf x in die anonyme Funktion übergibt) verhält sich anders als

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

Dieser wird einfach Ausgang des letzten Eintrag in arr wiederholt, da es nur eine x.

Auf jeden Fall sollten Sie als eine Möglichkeit bewusst do sein, eine anonyme Funktion, ohne dass die zusätzlichen Klammern ausgeführt wird, obwohl seine Fähigkeiten in Bezug auf Argumente Umgehung etwas begrenzt im Moment sind. Ich habe einen Vorschlag angehoben, um sie zu erweitern .

Derzeit wäre das Äquivalent des Codes Beispiel sein

do ->
  $ = jQuery
  ...

Wenn mein Vorschlag angenommen wird, wird es möglich sein, zu schreiben

do ($ = jQuery) ->
  ...

statt.

Kurze Variante

do ($=jQuery)->
 app = $.sammy ->
   @get '#/', -> $("#main").text ''
   @get '#/test', -> $('#main').text 'Hello world'
 $ -> app.run()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top