Anonymous Funktionen Syntax in Coffee
-
09-10-2019 - |
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);
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()