【问题标题】:how to expand the parent nodes of a selected child node on kendo treeview如何在剑道树视图上展开选定子节点的父节点
【发布时间】:2014-10-10 00:28:37
【问题描述】:

你好剑道爱好者..我在剑道树视图上有一个小问题,如果它是父节点,我设法扩展树视图的选定子节点,但我可以扩展它的祖父节点,这是我的小代码:

data.forEach(function (entry) {
                        var treeView = $("#sysfunc_ktreeview").data('kendoTreeView');
                        var dataSource = treeView.dataSource;
                        var dataItem = dataSource.get(entry);
                        var node = treeView.findByUid(dataItem.uid);
                        var checkbox = $("input[type='checkbox']", node)[0];
                        checkbox.click();
                    });

在这种情况下,我从数据库中获取数组。但是在这里,如果检查了子节点但没有在数组中的 id(父节点),我无法扩展父节点。任何伟大的帮助将不胜感激。这段小代码来自 OnaBai 先生。谢谢先生

【问题讨论】:

    标签: kendo-ui kendo-asp.net-mvc kendo-treeview


    【解决方案1】:

    如果要单击iddata 中的所有项目的祖先,请添加以下代码行:

    var ancestors = $(node).parents("li[role='treeitem']");
    $(">div>span>input", ancestors).click();
    

    这会选择当前节点的所有祖先clicksinput

    所以你的代码应该是这样的:

      data.forEach(function (entry) {
          var treeView = $("#treeview").data('kendoTreeView');
          var dataSource = treeView.dataSource;
          var dataItem = dataSource.get(entry);
          var node = treeView.findByUid(dataItem.uid);
          var checkbox = $("input[type='checkbox']", node)[0];
          checkbox.click();
          var ancestors = $(node).parents("li[role='treeitem']");
          $(">div>span>input", ancestors).click();
      });
    

    你可以看到它在这里运行:http://dojo.telerik.com/@OnaBai/IRom

    【讨论】:

    • 谢谢@OnaBai 先生,我会试试的。非常感谢
    • 按预期工作。谢谢好先生..应该添加到您的博客先生。
    【解决方案2】:

    我想出的最佳解决方案是:

    高亮代码:

    dataBound: function(e){
        // expands tree to the selected node
        var root = e.node ? $(e.node) : this.element;
        // expands only selected checkboxes and parents 
        this.expand(root.find(".k-item input[type=checkbox]:checked").parents());
    },
    

    完整代码:

    $(".locationTree").kendoTreeView({
        loadOnDemand: false,
        checkboxes: true,
        select: function(e){
            e.preventDefault();
        },
        dataSource: {
            type: "json",
            data: processTable(flatData, "id", "parent", 0)
        },
        dataBound: function(e){
            // expands tree to the selected node
            var root = e.node ? $(e.node) : this.element;
            //this.expand(root.find(".k-item")); // expands all
            // expands only selected checkboxes and parents 
            this.expand(root.find(".k-item input[type=checkbox]:checked").parents());
        },
    });
    

    【讨论】:

      【解决方案3】:

      @OnaBai 先生找到了更好的方法

      success: function (data) {
              $.each(data, function (index, entry) {
      
                              var dataSource = treeView.dataSource;
                              var dataItem = dataSource.get(entry);
      
                              if (!dataItem.hasChildren)
                              {
                                  dataItem.set("checked", true);
                              }
                              var node = treeView.findByUid(dataItem.uid);
      
                              parents.push(treeView.dataItem(treeView.parent(node)).id);
      
                              if (index + 1 == data.length) {
                                  setTimeout(function () {
                                      self.expandParents(parents, treeView);
                                  }, 100);
                              }                         
                          });
                          setTimeout(function () {
                              self.filterChange(treeView, data);
                          }, 100);
                      }
      

      【讨论】:

      • OnaBai 的解决方案更短更容易理解
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多