Quelle est la meilleure façon de chaîner des méthodes dans CoffeeScript? Par exemple, si j'ai ce JavaScript, comment pourrais-je l'écrire en CoffeeScript?
var req = $.get('foo.htm')
.success(function( response ){
// do something
// ...
})
.error(function(){
// do something
// ...
});
En utilisant le dernier CoffeeScript , ce qui suit:
req = $.get 'foo.html'
.success (response) ->
do_something()
.error (response) ->
do_something()
... compile pour:
var req;
req = $.get('foo.html').success(function(response) {
return do_something();
}).error(function(response) {
return do_something();
});
Il y a deux approches que vous pouvez adopter: La meilleure traduction "littérale" vers CoffeeScript est (à mon avis)
req = $.get('foo.htm')
.success((response) ->
# do something
)
.error( ->
# do something
)
L'autre approche consiste à déplacer les fonctions intégrées "contour", un style que Jeremy Ashkenas (le créateur de CoffeeScript) privilégie généralement pour les arguments de fonction non triviaux:
onSuccess = (response) ->
# doSomething
onError = ->
# doSomething
req = $.get('foo.htm').success(onSuccess).error(onError)
Cette dernière approche a tendance à être plus lisible lorsque les rappels success
et error
font plusieurs lignes; le premier est super s'il ne s'agit que de 1-2 doublures.
Je préfère parfois avoir moins de parenthèses plutôt que de chaîner, donc je modifierais le dernier exemple de Trevor:
req = $.get 'foo.htm'
req.success (response) -> # do something
req.error -> # do something
Depuis Coffeescript 1.7, le chaînage a été considérablement simplifié et vous ne devriez avoir besoin d'aucune des solutions de contournement liées à Parens mentionnées ici. Votre exemple ci-dessus peut maintenant être écrit comme
req = $.get 'foo.htm'
.success ( response ) ->
alert "success"
.error ->
alert "error"
Qui se compile pour
var req;
req = $.get('foo.htm').success(function(response) {
return alert("success");
}).error(function() {
return alert("error");
});
Vous pouvez voir une explication de cela et d'autres fonctionnalités de CS 1.7 ici: https://Gist.github.com/aseemk/8637896