如何从wijmo flex grid的树视图中的节点转到父节点

时间:2016-04-18 03:33:10

标签: javascript angularjs object wijmo

我正在使用wijmo flex网格为我的数据创建树视图,我能够找到特定节点是否有子节点以及节点的级别是多少但是我无法从父节点转到父节点给定节点。还将检索每行的索引。

对该主题的任何见解都非常有用。

$scope.selectionChanged = function(sender,args){
       var index = sender.selection.row;
        var temp;
        console.log(index);
        temp = sender._rows[index]._data;
        console.log(temp.reports);
    }; 

2 个答案:

答案 0 :(得分:1)

FlexGrid行有两种形式:常规行(Row对象)和节点(GroupRow对象)。常规行没有"级别",但GroupRow对象确实具有"级别"可用于获取节点级别的属性。

要获取行的父节点,您应该扫描网格的行集合,直到找到具有"级别的节点"小于你开始使用的那个。

这是演示文稿的小提琴:

http://jsfiddle.net/Wijmo5/8n2yde6f/

查看" getParentNode"的实现。方法,应该是您正在寻找的方法:

// gets the parent row for a given FlexGrid row.
// returns the parent row or null if original row doesn't have a parent.
function getParentNode(row) {

  // get row level
  var startLevel = row instanceof(wijmo.grid.GroupRow) ? row.level : -1;
  var startIndex = row.index;

  // travel up to find parent node
  for (var i = startIndex - 1; i >= 0; i--) {
    var thisRow = row.grid.rows[i],
        thisLevel = thisRow instanceof(wijmo.grid.GroupRow) ? thisRow.level : -1;
    if (thisLevel > -1) {
      if (startLevel == -1 || (startLevel > -1 && thisLevel < startLevel)) {
        return thisRow;
      }
    }
  }

  // not found
  return null;
};

希望这很有用。

答案 1 :(得分:0)

您要做的是使用您设置的FlexGrid的childItemPath访问所选行的dataItem并查看它是否包含子项。

以下是工作示例:http://jsfiddle.net/banzor/700e6bn2/1/

这是我的selectionChanged事件的代码。

$scope.selectionChanged = function(sender, args){
    var index = args.row;
    var row = args.panel.rows[index].dataItem;
    var childPath = sender.childItemsPath;
    var children = row[childPath];

    if (children && wijmo.isArray(children)) {
        console.log("Has items: " + children.length);
    }
};