почему скобка работает в coffeescript, когда появляются ошибки - PullRequest
1 голос
/ 20 июня 2011

Если я хочу получить такой код 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)
               )
)   
  )  

Не знаю почему? Это ошибка?

1 Ответ

4 голосов
/ 20 июня 2011

У синтаксического анализатора 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)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...