CoffeeScriptでメソッドをチェーンする最良の方法は何ですか? たとえば、この JavaScript がある場合、CoffeeScript でどのように記述できるでしょうか?
var req = $.get('foo.htm')
.success(function( response ){
// do something
// ...
})
.error(function(){
// do something
// ...
});
CoffeeScriptでメソッドをチェーンする最良の方法は何ですか? たとえば、この JavaScript がある場合、CoffeeScript でどのように記述できるでしょうか?
var req = $.get('foo.htm')
.success(function( response ){
// do something
// ...
})
.error(function(){
// do something
// ...
});
あなたが取ることができる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 の場合に最適です。
連鎖するよりも括弧を少なくしたい場合があるので、Trevor の最後の例を変更します。
req = $.get 'foo.htm'
req.success (response) -> # do something
req.error -> # do something
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 で確認できます。