65

在 CoffeeScript 中链接方法的最佳方式是什么?例如,如果我有这个 JavaScript,我怎么能用 CoffeeScript 编写它?

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

4 回答 4

70

使用最新的 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();
});
于 2011-05-10T07:30:46.323 回答
37

您可以采用两种方法:CoffeeScript 的最佳“字面”翻译是(在我看来)

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

另一种方法是移动内联函数“大纲”,这是 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 回答