65 votes

Le chaînage de méthode avec les arguments de la fonction

Quelle est la meilleure façon de la chaîne d'méthodes en CoffeeScript? Par exemple, si j'ai cette JavaScript comment ai-je pu l'écrire en CoffeeScript?

var req = $.get('foo.htm')
  .success(function( response ){
    // do something
    // ...
  })
  .error(function(){
    // do something
    // ...
  });

71voto

a paid nerd Points 11716

À l'aide de la dernière CoffeeScript, les éléments suivants:

req = $.get('foo.html')
  .success (response) ->
    do_something()
  .error (response) ->
    do_something()

...compile:

var req;
req = $.get('foo.html').success(function(response) {
  return do_something();
}).error(function(response) {
  return do_something();
});

37voto

Trevor Burnham Points 43199

Il existe deux approches que vous pouvez prendre: c'est Le meilleur "littérale" de la traduction de CoffeeScript est (à mon avis)

req = $.get('foo.htm')
  .success((response) ->
    # do something
  )
  .error( ->
    # do something
  )

L'autre approche consiste à déplacer les fonctions inline "plan", un style que Jeremy Ashkenas (le créateur de CoffeeScript) généralement des faveurs pour les non-trivial des arguments de la fonction:

onSuccess = (response) ->
  # doSomething

onError = ->
  # doSomething

req = $.get('foo.htm').success(onSuccess).error(onError)

Cette dernière approche a tendance à être plus lisible lorsque l' success et error rappels sont plusieurs lignes; la première est génial si ils sont juste 1-2 doublures.

11voto

Amir Points 3237

Parfois, je préfère avoir moins de parenthèses, par opposition à l'enchaînement, j'aimerais modifier Trevor dernier exemple:

req = $.get 'foo.htm'
req.success (response) -> # do something
req.error -> # do something

9voto

Ben McCormick Points 9118

Comme de Coffeescript 1.7, le chaînage a été considérablement simplifiée, et vous ne devriez pas besoin de toutes les parens liés à des solutions de contournement mentionnés ici. Votre exemple ci-dessus peut maintenant être écrite comme

req = $.get 'foo.htm'
.success ( response ) ->
  alert "success"
.error ->
  alert "error"

Qui compile

var req;

req = $.get('foo.htm').success(function(response) {
  return alert("success");
}).error(function() {
  return alert("error");
});

Vous pouvez voir une explication de ceci et d'autres CS 1.7 caractéristiques ici: https://gist.github.com/aseemk/8637896

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X