Coffeescript没有编译有效的来源

时间:2012-02-08 00:10:50

标签: coffeescript

我正在调用此函数并在此处出错: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 }
            });
        }); 

3 个答案:

答案 0 :(得分:2)

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转换为咖啡脚本......

转到http://js2coffee.org/并粘贴js(从您的版本更正)

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

你最终会得到结构良好的咖啡脚本......

$("#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

答案 1 :(得分:0)

我不知道到底出了什么问题,但写出它的更规范的方法是

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

对于这样的编译错误,请先转到Try Coffeescript并查看它是如何解析的。这使得在大多数情况下修复变得非常容易和快速。

答案 2 :(得分:0)

同一行上的对象属性使解析器混乱:

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一段时间。