我可以在coffeescript的多行中分配一个对象吗?

时间:2013-06-28 16:39:46

标签: coffeescript

我想我忘记了这个术语,所以欢迎标题编辑。我想做的是为我的$scope对象分配多个函数,如下所示:

    $scope.
      widgetDropped = (event, ui) ->
        (console.log "widget dropped")
      dragCallback = (event, ui) ->     # fails
        console.log("started drag")     # fails

所以前3行编译正常,但添加最后2行会导致编译失败。线条延续了一点,没有运气。是否有可能在coffeescript中进行这种多行对象分配?

2 个答案:

答案 0 :(得分:1)

我认为你正在寻找这样的东西:

$scope =
  widgetDropped : (event, ui) ->
    console.log "widget dropped"
  dragCallback : (event, ui) ->
    console.log "started drag"

之后你可以调用你的函数:

$scope.widgetDropped()  # logs "widget dropped"
$scope.dragCallback()   # logs "started drag"

这是running example

如果您愿意,可以添加大括号以清晰起见:

$scope = {
  widgetDropped : (event, ui) ->
    console.log "widget dropped"
  dragCallback : (event, ui) ->
    console.log "started drag"
}

答案 1 :(得分:0)

如果您正在尝试扩展(即一次设置多个属性)$scope,请执行以下操作:

$scope.widgetDropped = (event, ui) -> console.log "widget dropped"
$scope.dragCallback  = (event, ui) -> console.log("started drag")

然后你运气不好,CoffeeScript没有什么原生的。不过,各种库都提供了这方面的功能,Underscore / Lodash例如:

_($scope).extend(
    widgetDropped: (event, ui) -> console.log "widget dropped"
    dragCallback:  (event, ui) -> console.log("started drag")
)

jQuery has one too

destructured assignment有各种形式的另一种形式:

o = { where: 'is', pancakes: 'house?' }
{ pancakes } = o
# pancakes is now 'house?'

但没有原生合并技术。