KendoTreeView在第二层次结构中需要什么数据格式?

What data format does KendoTreeView require in second hierarchy?

本文关键字:什么 数据格式 层次结构 KendoTreeView      更新时间:2023-09-26

我正在使用KendoUI Web,并设置了一个具有两层层次结构的TreeView,它使用数据源的传输选项从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(),然后在一级数据源上调用.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)

你的语法不对。你必须写

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 }]