Coffeescript - 使用函数参数链接方法[2]或使用函数而不是params

时间:2013-03-19 08:13:59

标签: javascript syntax coffeescript

我最近开始学习CoffeeScript,我遇到了一个问题。我想写javascript:

TemplateManager.tmpl(this.template, this.modelJSON(), this.templateOptions()).done(
        function(rendered) { // something1
}).fail(function(ex) {
    // something2

});

我可以通过哪种方式获得它?我尝试改写:

TemplateManager.tmpl @template, @modelJSON(), @templateOptions()
    .done (rendered) ->
       #something1
    .fail (ex) ->
       #something2

我得到了:

TemplateManager.tmpl(this.template, this.modelJSON(), this.templateOptions().done(function(rendered) {

  }).fail(function(ex) {

  }));

2 个答案:

答案 0 :(得分:3)

tmpldone方法添加括号

TemplateManager.tmpl( @template, @modelJSON(), @templateOptions() )
   .done( (rendered) -> 
        #something1 
    )
   .fail (ex) ->
        #something2

解决方案并不优雅,我认为其他人可能会在coffeescript中提供更好的方法

<强>更新

根据评论,删除done的括号。我已经更新了代码,我觉得这个代码很优雅

TemplateManager
   .tmpl(@template, @modelJSON(), @templateOptions())
   .done (rendered) -> 
        some
        code
        here 

   .fail (ex) ->
        another
        code
        here

答案 1 :(得分:2)

而不是乱糟糟的“我不使用括号,因为它们是可选的”和难以理解的难以理解的缩进,只需将事情分解成小块,给出碎片名称,然后将它们放在一起:

done = (rendered) ->
    # something1
fail = (ex) ->
    # something2
TemplateManager.tmpl(@template, @modelJSON(), @templateOptions())
    .done(done)
    .fail(fail)

我不知道“something1”和“something2”是什么,所以我不能给他们体面的合理名称,考虑donefail作为概念名称的证据。

仅仅因为函数可以是匿名的并不意味着必须是匿名的,只是因为某些括号是可选的并不意味着它们必须被遗漏。