Coffeescript Coffescript未编译有效的源代码

Coffeescript Coffescript未编译有效的源代码,coffeescript,Coffeescript,我正在调用此函数并在此处获取错误:data:{key:node.parent.data.key}saing“Unexpected{”。是否有错误。因为我找不到错误 $("#discipline-list", @el).dynatree({ fx: { height: "toggle", duration: 100 }, initAjax: { url: "/disciplines", data: { mo

我正在调用此函数并在此处获取错误:
data:{key:node.parent.data.key}
saing“Unexpected{”。是否有错误。因为我找不到错误

 $("#discipline-list", @el).dynatree({
        fx: { height: "toggle", 
        duration: 100 },
        initAjax: {
          url: "/disciplines",
          data: { mode: "funnyMode" }
        },
        onLazyRead: (node) ->
            console.log(node);
            node.appendAjax({url: "/disciplines_details",
                data: { key: node.parent.data.key }
            });
        }); 

我不知道到底是什么错,但更规范的写作方式是

node.appendAjax
  url: "/disciplines_details"
  data: 
    key: node.parent.data.key

对于这样的编译错误,请始终首先转到并查看它是如何被解析的。这使得在大多数情况下修复非常简单和快速。

Coffee脚本不喜欢将匿名对象属性放在同一行上。添加一个换行符可修复此问题

 $("#discipline-list", @el).dynatree({
        fx: { height: "toggle", 
        duration: 100 },
        initAjax: {
          url: "/disciplines",
          data: { mode: "funnyMode" }
        },
        onLazyRead: (node) ->
            console.log(node);
            node.appendAjax({
                url: "/disciplines_details",
                data: { key: node.parent.data.key }
            });
        });

编辑:如何将js转换为咖啡脚本

$("#discipline-list", @el).dynatree
  fx:
    height: "toggle"
    duration: 100

  initAjax:
    url: "/disciplines"
    data:
      mode: "funnyMode"

  onLazyRead: (node) ->
    console.log node
    node.appendAjax
      url: "/disciplines_details"
      data:
        key: node.parent.data.key
转到并粘贴js(根据您的版本更正)

你最终会得到一个结构良好的咖啡剧本

$("#discipline-list", @el).dynatree
  fx:
    height: "toggle"
    duration: 100

  initAjax:
    url: "/disciplines"
    data:
      mode: "funnyMode"

  onLazyRead: (node) ->
    console.log node
    node.appendAjax
      url: "/disciplines_details"
      data:
        key: node.parent.data.key

同一行上的对象属性混淆了解析器:

node.appendAjax({url: "/disciplines_details",
只需将
url
移动到下一行,它就可以工作了:

node.appendAjax({
    url: "/disciplines_details",
也就是说,您仍然在编写javascript

空白在coffeescript中很重要(即,您不能缩小它)。正确的缩进是必要的,而此代码完全错误。修复缩进,去掉逗号和分号:

$("#discipline-list", @el).dynatree({
    fx: {
        height: "toggle"
        duration: 100
    }
    initAjax: {
        url: "/disciplines",
        data: { mode: "funnyMode" }
    }
    onLazyRead: (node) ->
        console.log(node)
        node.appendAjax({
            url: "/disciplines_details"
            data: { key: node.parent.data.key }
        })
})

然后像@Billy的最后一个示例一样,继续去掉括号和括号。如果您不舒服,您应该尝试使用普通javascript一段时间。

此外,如@jkbr所示,它可以删除大量语法,以使其在coffee脚本中更具可读性