Kendo UI Treeview给出错误“Uncaught TypeError:Object [没有方法'级别'”

时间:2013-12-31 23:52:47

标签: kendo-ui hierarchical-data kendo-treeview

我正在使用HierarchicalDataSource通过ajax调用填充TreeView对象。我的javascript:

$(document).ready(function() {
var dataSource = new kendo.data.HierarchicalDataSource({
    transport: {
        read: "ajax/call/url.json",
        dataType: "jsonp",
        parameterMap: function (data, action) {
            if (action == "read") {
                return {
                    id: $("#id").val()
                };
            }
        }
    }
});

var treeView = $("#treeView").kendoTreeView({
    checkboxes: {
        checkChildren: true
    },
    loadOnDemand: false,
    dataSource: dataSource
});
});

ajax调用成功执行,我收到的数据如下:

[
{id: -1, text: "A", expanded: true, items: 
    [
    {id: 1, text: "A1", checked: false}
    ]
},
{id: -1, text: "B", expanded: true, items: 
    [
    {id: 2, text: "B1", checked: false},
    {id: -1, text: "B2", expanded: true, items: 
        [
        {id: 3, text: "B21", checked: false},
        {id: 4, text: "B22", checked: false}
        ]
    },
    {id: -1, text: "B3", expanded: true, items: 
        [
        {id: 5, text: "B31", checked: false},
        {id: 6, text: "B32", checked: false}
        ]
    }
    ]
}
]

在ajax调用之后和TreeView呈现之前(它仍然显示加载动画)我收到错误:

  

未捕获的TypeError:对象[没有方法'级别'

如果我在HierarchicalDatasource(数据:“...”)中复制收到的数据,TreeView渲染就好了,就像一个魅力。问题是尝试绑定到远程数据时。为什么会出现这个问题?我没有正确配置HierarchicalDataSource吗?

3 个答案:

答案 0 :(得分:4)

我已解决了报道的问题。我在原始帖子中收到的数据是一个字符串,正如我展示的那样,减去了空格和新行。我现在用这些数据做的是将它转换为Javascript数组:

var dataSource = new kendo.data.HierarchicalDataSource({
transport: {
    read: "url/to/ajax/service",
    parameterMap: function (data, action) {
        if (action == "read") {
            return {
                id: $("#id").val()
            };
        }
    }
},
schema: {
    model: {
        children: "items",
        id: "id",
        checked: "checked"
    },
    data: function(data) {
        var dataArray = eval(data);
        return dataArray;
    }
}
});

var treeView = $("#treeView").kendoTreeView({
    checkboxes: {
        checkChildren: true
    },
    loadOnDemand: false,
    dataSource: dataSource,
    dataTextField: "text"
});

现在工作正常。

答案 1 :(得分:1)

假设您的后端是用PHP编写的,请添加此

header('Content-Type: application/json');
发送任何其他内容之前

它为我做了诀窍。

答案 2 :(得分:0)

可能是json格式不正确。它必须被序列化。