Dienstag, 13. Mai 2014

jQuery with CoffeeScript




CSS-Tricks





jQuery with CoffeeScript



I don't always write CoffeeScript, but when I do, I'm probably using jQuery too I always forget the syntax for stuff. So I'm going to write it all down here so I can reference it until I memorize it.



Note that the compiled example doesn't include the automatic closure around everything you get in CoffeeScript.


Safe jQuery Closure


So you can use the $ safely (common in WordPress):


(($) ->

) jQuery

(function($) {

})(jQuery);

DOM Ready


$ ->
console.log("DOM is ready")

$(function() {
return console.log("DOM is ready");
});

Call Method with No Params


$(".submit").click ->
console.log("submitted!")

$(".submit").click(function() {
return console.log("submitted!");
});

Call Method with One Param


$(".button").on "click", ->
console.log("button clicked!")

$(".button").on("click", function() {
return console.log("button clicked!");
});

Call Method With Multiple Params


$(document).on "click", ".button2", ->
console.log("delegated button click!")

$(document).on("click", ".button2", function() {
return console.log("delegated button click!");
});

Params in the Anonymous Function


$(".button").on "click", (event) ->
console.log("button clicked!")
event.preventDefault()

$(".button").on("click", function(event) {
console.log("button clicked!");
return event.preventDefault();
});

Returning False


$(".button").on "click", ->
false

$(".button").on("click", function() {
return false;
});

A Simple 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
});
});
}
});

Using Plugin


$("a").makeColor
color: "green"

$("a").makeColor({
color: "green"
});

Ajax


Note the string interpolation in there too, that's nice.


$.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


Two ways.


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 with Callback


div.animate
color: red
2000
->
doSomething()

div.animate({
color: red
}, 2000, function() {
return doSomething();
});

Chaining


Not too much different.


$("input")
.val("")
.css
'z-index': 5
.removeClass "fart"

$("input").val("").css({
'z-index': 5
}).removeClass("fart");

Promises


The last line gets returned here when it doesn't really need to but whatever.


$.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 to Retain `this`


Otherwise inside the setTimeout you wouldn't have a reference to the button.


$(".button").click ->
setTimeout ( =>
$(@).slideUp()
), 500

$(".button").click(function() {
return setTimeout(((function(_this) {
return function() {
return $(_this).slideUp();
};
})(this)), 500);
});



Here's the lot of them in a Pen if you wanna tinker.




jQuery with CoffeeScript is a post from CSS-Tricks








Keine Kommentare:

Kommentar veröffentlichen