Как перейти к родительскому узлу из узла в дереве wijmo flex grid

Я использую сетку 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);
    }; 

person deep_005    schedule 18.04.2016    source источник
comment
Пожалуйста, напишите свой код детали, это будет полезно для нас, чтобы ответить на ваш вопрос   -  person Khalid Hussain    schedule 18.04.2016
comment
Я использую метод selectionChanged для обнаружения щелчка по строке. Этот метод получает два аргумента: [sender, args] объект-отправитель имеет сведения обо всей сетке, с помощью которой я могу получить индекс строки, уровень в иерархия, информация о том, есть ли у узла дочерние элементы или нет.. теперь мне нужно дать дочернему узлу необходимость идентифицировать его родительский узел..   -  person deep_005    schedule 18.04.2016
comment
Отредактировал. Разместил код в вопросе. @ХалидХусейн ..   -  person deep_005    schedule 18.04.2016


Ответы (2)


Строки 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;
};

Надеюсь, это полезно.

person Bernardo    schedule 18.04.2016
comment
Спасибо, Бернардо. Я неправильно понял вопрос и дал бесполезный ответ... Извините за это. - person Banzor; 18.04.2016

Что вам нужно сделать, так это получить доступ к элементу данных выбранной строки и посмотреть, содержит ли он дочерние элементы, используя установленный вами путь дочернего элемента FlexGrid.

Вот рабочий пример: 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);
    }
}; 
person Banzor    schedule 18.04.2016
comment
Большое спасибо за ваш ответ, ребята .. получил то, что хотел. - person deep_005; 19.04.2016