Ich schreibe nicht immer CoffeeScript, aber wenn ich es tue, benutze ich wahrscheinlich auch jQuery; ich vergesse immer die Syntax für Dinge. Also werde ich alles hier aufschreiben, damit ich es nachschlagen kann, bis ich es auswendig kann.
Beachten Sie, dass das kompilierte Beispiel nicht die automatische Schließung um alles enthält, was Sie in CoffeeScript bekommen.
Sicheres jQuery Closure
So können Sie das $ sicher verwenden (üblich in WordPress)
(($) ->
) jQuery
(function($) {
})(jQuery);
DOM Ready
$ ->
console.log("DOM is ready")
$(function() {
return console.log("DOM is ready");
});
Methode ohne Parameter aufrufen
$(".submit").click ->
console.log("submitted!")
$(".submit").click(function() {
return console.log("submitted!");
});
Methode mit einem Parameter aufrufen
$(".button").on "click", ->
console.log("button clicked!")
$(".button").on("click", function() {
return console.log("button clicked!");
});
Methode mit mehreren Parametern aufrufen
$(document).on "click", ".button2", ->
console.log("delegated button click!")
$(document).on("click", ".button2", function() {
return console.log("delegated button click!");
});
Parameter in der anonymen Funktion
$(".button").on "click", (event) ->
console.log("button clicked!")
event.preventDefault()
$(".button").on("click", function(event) {
console.log("button clicked!");
return event.preventDefault();
});
False zurückgeben
$(".button").on "click", ->
false
$(".button").on("click", function() {
return false;
});
Ein einfaches Plugin
$.fn.extend
makeColor: (options) ->
settings =
option1: "red"
settings = $.extend settings, options
return @each () ->
$(this).css
color: settings.color
$.fn.extend({
makeColor: function(options) {
var settings;
settings = {
option1: "red"
};
settings = $.extend(settings, options);
return this.each(function() {
return $(this).css({
color: settings.color
});
});
}
});
Plugin verwenden
$("a").makeColor
color: "green"
$("a").makeColor({
color: "green"
});
Ajax
Beachten Sie auch die String-Interpolation, das ist nett.
$.ajax
url: "some.html"
dataType: "html"
error: (jqXHR, textStatus, errorThrown) ->
$('body').append "AJAX Error: #{textStatus}"
success: (data, textStatus, jqXHR) ->
$('body').append "Successful AJAX call: #{data}"
$.ajax({
url: "some.html",
dataType: "html",
error: function(jqXHR, textStatus, errorThrown) {
return $('body').append("AJAX Error: " + textStatus);
},
success: function(data, textStatus, jqXHR) {
return $('body').append("Successful AJAX call: " + data);
}
});
Animation
Zwei Wege.
div.animate {width: 200}, 2000
div.animate
width: 200
height: 200
2000
div.animate({
width: 200
}, 2000);
div.animate({
width: 200,
height: 200
}, 2000);
Animation mit Callback
div.animate
color: red
2000
->
doSomething()
div.animate({
color: red
}, 2000, function() {
return doSomething();
});
Verkettung
Nicht viel anders.
$("input")
.val("")
.css
'z-index': 5
.removeClass "fart"
$("input").val("").css({
'z-index': 5
}).removeClass("fart");
Promises
Die letzte Zeile wird hier zurückgegeben, obwohl es nicht wirklich nötig ist, aber egal.
$.when(
$.get("/feature/", (html) ->
globalStore.html = html;
),
$.get("/style.css", (css) ->
globalStore.css = css;
)
).then ->
$("<style />").html(globalStore.css).appendTo("head")
$("body").append(globalStore.html)
$.when($.get("/feature/", function(html) {
return globalStore.html = html;
}), $.get("/style.css", function(css) {
return globalStore.css = css;
})).then(function() {
$("<style />").html(globalStore.css).appendTo("head");
return $("body").append(globalStore.html);
});
Fat Arrow, um `this` zu erhalten
Andernfalls hätten Sie innerhalb von `setTimeout` keine Referenz auf den Button.
$(".button").click ->
setTimeout ( =>
$(@).slideUp()
), 500
$(".button").click(function() {
return setTimeout(((function(_this) {
return function() {
return $(_this).slideUp();
};
})(this)), 500);
});
Hier sind alle zusammen in einem Pen, wenn Sie daran basteln möchten.
Ich bin neugierig, was Ihre Gedanken zu CoffeeScript im Vergleich zum Schreiben von JS sind. Ich habe Ihren Vortrag auf der Front End Design Conference über SASS und seine notwendige Abstraktion gehört. Fühlen Sie dasselbe mit CoffeeScript?
Das interessiert mich auch. Ich sehe keinen großen Vorteil darin, CoffeeScript gegenüber JS zu verwenden, verglichen mit den Hürden, die zu überwinden sind (Compiler einrichten, neue Syntax lernen)
Ich stimme auch zu…
Wenn ich die Code-Unterschiede zwischen CoffeeScript und jQuery betrachte, sehe ich nur eine Einsparung von ein paar Zeichen… aber ich finde CoffeeScript auch viel schwerer zu lesen…
Die Klammern im nativen JS und jQuery helfen (mir zumindest) den Code zu verstehen und den Code in verständliche Blöcke zu unterteilen…
Auch ich sehe keinen Vorteil darin, Ihr Gehirn mit einer weiteren Syntax zu füllen und Ihrem Arbeitsablauf eine weitere Komplexität hinzuzufügen, nur um ein paar Tastenanschläge zu sparen…
Nur meine Meinung…
Ich war anfangs nicht überzeugt, aber nachdem ich Coffeescript seit ein paar Jahren benutze, bevorzuge ich es gegenüber Javascript, wann immer ich die Chance dazu habe. Hier sind ein paar Gründe
Ich schreibe schneller Code und habe mehr Zeit, um sicherzustellen, dass er von guter Qualität ist
Einige beschweren sich, dass es Leute zu schludrigen Javascript-Codern macht. Ich glaube nicht, dass irgendeine Sprache das verhindern kann. Guter Code ist eine Disziplin, und das kann man mit Coffeescript genauso gut wie mit Javascript machen. Ich verbringe immer noch viel Zeit mit Javascript und überprüfe normalerweise die generierte Ausgabe.
Ich finde den Mangel an geschweiften Klammern jetzt von Vorteil. Die Einrückung ist leichter zu erkennen und ich finde die Syntax in vielen Situationen lesbarer als JavaScript.
Die einzige Ärgernis, die ich habe, ist, wenn ich Sprachen wechsle; manchmal codiere ich eine in der anderen. Aber das mache ich sowieso mit anderen Sprachen.
Die Einrichtung ist wirklich nicht schwer. Und wenn Sie Sass vorverarbeiten, ist es ein sehr kleiner Schritt, CoffeeScript hinzuzufügen. Fast nichts, wenn Sie Grunt oder Gulp oder Codekit verwenden.
Ich bin sicher, es könnte mehr gesagt werden, aber dies sind ein paar Ideen. Sicherlich wird das Leben weitergehen, wenn Sie CoffeeScript nicht ausprobieren. Ich denke, es ist einen Versuch wert. Sie wissen nie, vielleicht gefällt es Ihnen sehr.
Ich verwende es gerne in Kombination mit SASS wegen ihrer Ähnlichkeit im Aussehen und der Einrückungssyntax.
Ich habe nicht das Gefühl, dass CoffeeScript für JavaScript so nützlich ist wie Sass für CSS. Mit Sass ist das die primäre Abstraktion. Sass gibt Ihnen diese grundlegenden Werkzeuge der Abstraktion, die (normalerweise) benötigt werden. Diese primären Abstraktionen existieren bereits in JavaScript (Variablen, Funktionen usw.).
Ich habe keine sehr starken Gefühle für CoffeeScript im Allgemeinen. Wenn es Ihnen gefällt und Sie damit produktiv sind, großartig. Ich würde das niemandem wegnehmen wollen. Ich beschäftige mich damit, weil ich es interessant und lustig finde. Ich denke, es ist viel besser für JSON-Konfigurationen, z.B. Gruntfile.coffee
$(“input”)
.val “”
.css ‘z-index’: 5
.removeClass “fart”
Toller Artikel, bookmarkiert!
Ich benutze diese Seite js2coffee.org immer, um meinen Code zu konvertieren.
Fat arrow ist gut, normalerweise packe ich meine Funktionen in `bind`, um `this` zu erhalten, was nicht sehr schön ist. Auch Konsolen-Logs brauchen keine (), was praktisch ist. `console.log 'hallo welt'` reicht aus
Mich würde interessieren, ob jemand `$.proxy` verwendet, wenn er jQuery in Coffee schreibt (oder es einfach mit Fat Arrows macht). Ein Rat für Leute, die von JS zu Coffee wechseln: Vergessen Sie nicht die impliziten Rückgaben! Ich habe einige leicht fehlerhafte jQuery-Plugins gesehen, weil die falschen Dinge zurückgegeben wurden.
Beachten Sie, dass Sie keine Klammern benötigen, wenn Sie ein Argument nach einer anonymen Funktion übergeben
Danke für den Beitrag!
Ihre Beispiele mit keiner, einer und vielen Parametern haben tatsächlich einen Parameter mehr als behauptet: die `->` ist eine anonyme Funktion, die in diesen Beispielen als Parameter übergeben wird.
Bei Coffeescript spielen wahrscheinlich Präferenzen für andere Sprachen eine Rolle. Wenn Sie beispielsweise PHP oder Java gewohnt sind, wird die reine JavaScript-Syntax wahrscheinlich natürlicher wirken. Aber wenn Sie viel Python oder Ruby verwenden, wird CoffeeScript wahrscheinlich leichter angenommen.
Eine weitere Möglichkeit, ein sicheres jQuery-Closure mit weniger Whitespace-Magie zu schreiben
Habe vor ein paar Jahren einen ähnlichen Beitrag kompiliert: “js vs jq+cs”
Aus irgendeinem Grund konnte ich mich nie für CoffeeScript begeistern. Ich weiß, dass die Syntax prägnant sein soll, aber sie sieht einfach so seltsam aus und ist schwer zu lesen. Ich weiß, dass man sich an alles gewöhnt, wenn man Zeit und Erfahrung damit hat, aber die Tatsache, dass Sie einen Blogbeitrag schreiben, um sich an die Syntax zu erinnern, ist ein wenig beunruhigend.
Wenn Sie einen JS-Präprozessor verwenden möchten, hat TypeScript meine Stimme!
Sie haben einen OBOE (einen Off-By-One-Fehler) in Ihrem Beitrag. Ihr "Methode ohne Parameter aufrufen" hat einen Parameter, "Methode mit einem Parameter aufrufen" hat zwei und so weiter...
Ich folge nicht ganz. Das meine ich mit Parametern, glaube ich: http://glui.me/?i=2mh6u205x4yer1h/2014-05-14_at_7.24_AM.png/
"click" ist das erste Argument. Die anonyme Funktion ist die zweite.
Ah, richtig. Nun, ich denke, es ist ziemlich klar und so denke ich darüber.
Nur eine weitere Möglichkeit, sich selbst ins Bein zu schießen :-)
Warum lernen und verwenden Sie nicht einfach reines JavaScript, da dies sowieso die zugrunde liegende Plattform ist?
Es gibt "zugrunde liegende Plattformen" bis ganz nach unten.
Ein großartiges Beispiel… dafür, wie CoffeeScript ein Problem löst, das nicht existiert!
Ich habe mit CoffeeScript herumgespielt. Es schien zuerst nett. Ich würde es jedoch niemals für Projekte verwenden, an denen andere Entwickler jemals arbeiten müssen.
Klammern sind gut! Wenn Ihre Einrückung aus irgendeinem Grund durcheinandergerät, dann scheint CoffeeScript nicht mehr Spaß zu machen…
Ein weiterer Grund, schönen, konsistenten und gut eingerückten Code zu schreiben. Wenn CoffeeScript ihn nicht kompilieren kann, bedeutet das, dass Ihr Code nicht richtig geschrieben ist…
Ich denke, JCD hat oben genau das Richtige gesagt, dass die CoffeeScript-Syntax für Ruby-Entwickler attraktiver sein könnte. PHP-Entwickler werden wahrscheinlich die Klammern von reinem JS/jQuery mögen. Ähnlich wie bei Tools wie HAML, denke ich. Ich bin mir immer noch nicht sicher, warum Jade bei Node/Express-Apps so verbreitet zu sein scheint.
Bezüglich der unerwünschten Rückgabe in Ihrem Promises-Schnipsel können Sie eine normale Rückgabe am Ende einer Funktion in Coffeescript durchführen, z.B.
.then ->
$(“”).html(globalStore.css).appendTo(“head”)
$(“body”).append(globalStore.html)
return
Wie Sie wissen, gibt Coffeescript normalerweise die letzte Zeile zurück, aber der Compiler erkennt, wenn nichts zurückgegeben wird, und lässt die implizite Rückgabe im kompilierten JS weg.
oder `null`
`null` wird zu `return null` kompiliert, während `return` die implizite Rückgabe vollständig weglässt.
Toller Artikel Chris, sehr informativ! Ich persönlich benutze js2coffee, um meine Codes zu konvertieren.
Aber warum benutzen wir immer noch CoffeeScript?
Ich fand den verwirrenden Teil bei der Verwendung von JS, jQuery und CoffeeScript in den vielen Variationen der Implementierung und den leicht unterschiedlichen Syntaxen. Kombinieren Sie das mit Framework-spezifischen Anpassungen (z. B. Turbolinks in Rails), und es ist ziemlich schwer, sie zu verinnerlichen, wenn man sie alle lernt.