如果我想得到这样的js代码,它是从coffeescript编译的:
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)
)
)
) 我不知道为什么?是虫子吗?
发布于 2011-06-20 14:55:24
当涉及到跨多行拆分函数参数时,CoffeeScript解析器有许多奇怪之处。(见第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)
})https://stackoverflow.com/questions/6412151
复制相似问题