CoffeeScriptでメソッドをチェーンする最良の方法は何ですか?たとえば、このJavaScriptがある場合、どのようにしてCoffeeScriptで記述できますか?
var req = $.get('foo.htm')
.success(function( response ){
// do something
// ...
})
.error(function(){
// do something
// ...
});
最新のCoffeeScript を使用すると、次のようになります。
req = $.get 'foo.html'
.success (response) ->
do_something()
.error (response) ->
do_something()
...コンパイルして:
var req;
req = $.get('foo.html').success(function(response) {
return do_something();
}).error(function(response) {
return 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