Kendo TreeList - 添加和更新行

时间:2015-06-17 08:53:12

标签: kendo-ui treelist

我正在使用Kendo TreeList来显示分层数据。应用程序允许用户向显示的数据添加新行,或编辑现有数据。我没有使用内联编辑。 现在我通过这段代码添加新行:

treeList.dataSource.data().push(vm);

如果用户编辑了某行,则会在dataSource中更新:

for (i = 0; i < dsData.length; i++) {
    if (dsData[i].get("TaskUid") === vm.get("TaskUid")) {
        dsData[i] = vm;
        var curId = vm.get("VisualId");
        vm.set("VisualId", curId);
        grid.dataSource.read();
        onDataBound();
    }
}

有副作用 - 在调用dataSource.read()时,新添加的项目从TreeList控件中消失。 问题是 - 如何在没有这种副作用的情况下在treeList中添加数据和刷新数据?

1 个答案:

答案 0 :(得分:1)

可能你应该考虑使用

  • dataSource.pushCreate将新元素添加到dataSource和
  • dataSource.pushUpdate编辑内部的现有元素 数据源

我复制一些基本下拉列表的示例,并添加3个按钮

  1. 第一个按钮将添加一个新的父节点
  2. 第二个按钮将编辑第一个父节点jane smith
  3. 第三个按钮在jane smith上添加新的子节点
  4. 这样做:

    &#13;
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>Kendo UI Snippet</title>
    
      <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.common.min.css">
      <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.rtl.min.css">
      <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.default.min.css">
      <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.dataviz.min.css">
      <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.dataviz.default.min.css">
      <link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.429/styles/kendo.mobile.all.min.css">
    
      <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
      <script src="http://cdn.kendostatic.com/2015.1.429/js/kendo.all.min.js"></script>
    </head>
    
    <body>
    
      <!-- Define the HTML div that will hold the TreeList -->
      <div id="treelist"></div>
      <button id="new">Add new</button>
      <button id="editParent">Edit Jane Smith</button>
      <button id="addChild">Add child node to Jane Smith</button>
      <!-- Initialize the TreeList -->
      <script>
        $(document).ready(function() {
          $("#treelist").kendoTreeList({
            columns: [{
              field: "Name"
            }, {
              field: "Position"
            }],
            dataSource: {
              data: [{
                id: 1,
                parentId: null,
                Name: "Jane Smith",
                Position: "CEO"
              }, {
                id: 2,
                parentId: 1,
                Name: "Alex Sells",
                Position: "EVP Sales"
              }, {
                id: 3,
                parentId: 1,
                Name: "Bob Price",
                Position: "EVP Marketing"
              }]
            }
          });
        });
    
        $("#new").on("click", function() {
          var newElement = {
            id: 4,
            parentId: null,
            Name: "John Doe",
            Position: "HRD"
          };
          $("#treelist").data("kendoTreeList").dataSource.pushCreate(newElement);
        });
    
        $("#editParent").on("click", function() {
          var updatedElement = {
            id: 1,
            parentId: null,
            Name: "Scooby Doo",
            Position: "CEO Pet"
          };
          $("#treelist").data("kendoTreeList").dataSource.pushUpdate(updatedElement);
        });
    
        $("#addChild").on("click", function() {
          var newElement = {
            id: 5,
            parentId: 1,
            Name: "Ricky Martin",
            Position: "EVP Legal"
          };
          $("#treelist").data("kendoTreeList").dataSource.pushCreate(newElement);
        });
      </script>
    </body>
    
    </html>
    &#13;
    &#13;
    &#13;