我正在使用KendoUI Web并设置了一个具有两级层次结构的TreeView,它们使用DataSource的传输选项从CRUD服务加载数据:
var Level2 = kendo.data.Node.define({
id: "Level2_Id",
hasChildren: false,
fields: {
"Level2_Id": { type: "number" },
"Name": { type: "string" },
"Level1_Id": { type: "number" }
}
});
var level2DataSource = {
transport: {
read: {
url: "/service/level2",
type: "get",
dataType: "json"
},
create: {
url: "/service/level2",
type: "post",
dataType: "json"
}
},
schema: {
model: Level2
}
};
var Level1 = kendo.data.Node.define({
id: "Level1_Id",
hasChildren: true,
fields: {
"Level1_Id": { type: "number" },
"Name": { type: "string" },
},
children: level2DataSource,
});
var level1DataSource = new kendo.data.HierarchicalDataSource({
transport: {
read: {
url: "/service/level1",
type: "get",
dataType: "json"
},
create: {
url: "/service/level1",
type: "post",
dataType: "json"
}
},
schema: {
model: Level1
}
});
var myTreeview = $("#treeview").kendoTreeView({
dataSource: leaguesDataSource,
template: kendo.template($("#treeview-template").html())
});
读取数据在两个级别上都可以正常工作。
通过在TreeView上调用.append()
然后在1级DataSource上调用.sync()
来创建新项目。
这会导致对我的服务发出POST请求,返回新的JSON对象。树视图更新很好。
但是,在第2级上执行相同操作时,树视图将删除所有项目,并仅显示新项目附加到的第1级项目的第2级子项。
GET请求返回1级或2级项目的JSON数组,如
result of /service/level1
[
{Level1_Id:1,Name:"Item 1"},
{Level1_Id:2,Name:"Item 2"},
{Level1_Id:3,Name:"Item 3"},
]
result of /service/level2
[
{Level2_Id:1,Name:"Item 2.1",Level1_Id:2},
{Level2_Id:2,Name:"Item 2.2",Level1_Id:2}
]
POST请求返回相同格式的单个对象。
我需要在我的服务中返回什么格式,以便在追加项目后,树视图会在第2级正确更新?
预期结果:
- Item 1
- Item 2 (append here)
- Item 2.1
- Item 2.2 (new item)
- Item 3
POST请求后的实际结果:
- Item 2.1
- Item 2.2 (new item)
答案 0 :(得分:0)
你的语法不对。你必须写
schema:{model:{id: "IdLevel", children: "items", hasChildren: "hasChildren"}}
有分层数据。
例如,您必须拥有以下数据:
[
{ categoryName: "SciFi", items: [
{ movieName: "Inception", rating: 8.8 },
{ movieName: "The Matrix", rating: 8.7 }
] },
{ categoryName: "Drama", hasAssignedMovies: true }]