65

CoffeeScriptでメソッドをチェーンする最良の方法は何ですか? たとえば、この JavaScript がある場合、CoffeeScript でどのように記述できるでしょうか?

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

4 に答える 4

37

あなたが取ることができる2つのアプローチがあります: CoffeeScriptへの最良の「文字通りの」翻訳は(私の意見では)

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

もう 1 つのアプローチは、インライン関数を「アウトライン」に移動することです。これは、Jeremy Ashkenas (CoffeeScript の作成者) が一般的に非自明な関数引数に好んで使用するスタイルです。

onSuccess = (response) ->
  # doSomething

onError = ->
  # doSomething

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

success後者のアプローチは、コールバックとerrorコールバックが数行の長さの場合に読みやすくなる傾向があります。前者は、ライナーが 1 ~ 2 の場合に最適です。

于 2011-02-28T16:18:16.837 に答える
11

連鎖するよりも括弧を少なくしたい場合があるので、Trevor の最後の例を変更します。

req = $.get 'foo.htm'
req.success (response) -> # do something
req.error -> # do something
于 2011-03-02T19:40:38.120 に答える
9

Coffeescript 1.7 の時点で、連鎖は大幅に簡素化されており、ここで言及されている括弧関連の回避策は必要ありません。上記の例は次のように記述できます

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

コンパイルするもの

var req;

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

これとその他の CS 1.7 機能の説明は、https ://gist.github.com/aseemk/8637896 で確認できます。

于 2014-02-18T16:25:07.130 に答える