javascript - 为什么当错误出现时支架在 coffeescript 中工作

标签 javascript coffeescript

如果我想获得这样一个从 coffeescript 编译的 js 代码:

  var sortableTodos = new Sortables("todo-list", {
constrain: true,
clone: true,
handle: ".todo-content",
onComplete: function(ele){
  sortableTodos.serialize(false, function(element, index){
    todo = Todos.get(element.getProperty("id").replace("todo-", ""));
    todo.save({"order": index});
  });
}
});

我不能像下面这样写咖啡代码:

sortableTodos = new Sortables(
"todo-list"
(
    constrain: true
    handle: '.todo-content'
    onComplete:(ele)->
        sortableTodos.serialize false, (element,index)->
                todo = Todos.get(element.getProperty("id")).replace("todo-","")
                todo.save("order":index)

)   
   )

但是下面的工作(它在onComplete之后有括号)

sortableTodos = new Sortables(
"todo-list"
(
    constrain: true
    handle: '.todo-content'
    onComplete:((ele)->
        sortableTodos.serialize false, (element,index)->
                todo = Todos.get(element.getProperty("id")).replace("todo-","")
                todo.save("order":index)
               )
)   
  )  

不知道为什么?是bug吗?

最佳答案

CoffeeScript 解析器在跨多行拆分函数参数时有很多怪癖。 (请参阅 issue 1135。)只有在省略括号时,函数的多行参数才允许用于 YAML 样式的对象。所以虽然

func
  foo: bar
  x: y

有效(编译以将单个对象传递给 func),其他参数通常需要与 func 位于同一行。或者你可以在行尾使用 \ 转义符,就像在 JS 中一样,让编译器将多行视为一行:

func \
  a  \
  b

针对您的情况的最佳解决方法是将您的字符串移动到与函数调用相同的行,去掉对象文字周围的括号(如果您愿意,可以使用花括号),并与缩进保持一致:

sortableTodos = new Sortables("todo-list", {
    constrain: true
    handle: '.todo-content'
    onComplete: (ele) ->
        sortableTodos.serialize false, (element,index) ->
            todo = Todos.get(element.getProperty("id")).replace("todo-","")
            todo.save("order":index)
})

关于javascript - 为什么当错误出现时支架在 coffeescript 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412151/

相关文章:

javascript - 如何从 Angular Directive(指令)中的数组中删除

javascript - 输入字段返回未定义但在更改值后有效

javascript - 用于查询多个对象键的 Underscore.js 或 CoffeeScript 习语?

javascript - 所有 $watch 执行后的 AngularJS Controller 事件

javascript - 教育用途的 CoffeeScript 与纯 JavaScript

javascript - Canvas lineTo 中的 lineWidth 变化更平滑

javascript - 下载大文件

javascript - angularjs 观察图像以查看其是否已完成加载

javascript - CoffeeScript:切换属性的 "true"和 "false"

ember.js - 在路由之间传递隐藏参数