我正在使用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吗?
答案 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格式不正确。它必须被序列化。