在CoffeeScript中链接方法的最佳方法是什么?例如,如果我有这个JavaScript,我怎么能用CoffeeScript写它?
var req = $.get('foo.htm')
.success(function( response ){
// do something
// ...
})
.error(function(){
// do something
// ...
});
答案 0 :(得分:71)
使用the latest 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();
});
答案 1 :(得分:37)
您可以采取两种方法:对CoffeeScript的最佳“文字”翻译(在我看来)
req = $.get('foo.htm')
.success((response) ->
# do something
)
.error( ->
# do something
)
另一种方法是移动内联函数“outline”,这是Jeremy Ashkenas(CoffeeScript的创建者)通常偏爱非平凡函数参数的一种风格:
onSuccess = (response) ->
# doSomething
onError = ->
# doSomething
req = $.get('foo.htm').success(onSuccess).error(onError)
当success
和error
回调多行时,后一种方法往往更具可读性;如果他们只有1-2个衬里,那么前者是伟大的。
答案 2 :(得分:11)
我有时更喜欢使用较少的括号而不是链接,所以我会修改Trevor的最后一个例子:
req = $.get 'foo.htm'
req.success (response) -> # do something
req.error -> # do something
答案 3 :(得分:9)
从Coffeescript 1.7开始,链接已经大大简化了,你不应该需要这里提到的与parens相关的任何解决方法。您的上述示例现在可以写为
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