Angular UI-Grid ExpandableRow selectionChange update parent

Я использую Angular-UI Grid и опцию ui-grid-expandable. Есть ли возможность также выбрать строку родительской сетки, если выбрана одна строка расширяемой (дочерней) сетки? Если нет, по крайней мере, мне нужен доступ к родительской сетке/строке в событии rowSelectionChanged вспомогательной (расширяемой) сетки, похоже, у нее нет собственной области?

 gridApi.selection.on.rowSelectionChanged($scope, function (rows) {
             var selectedRows=gridApi.selection.getSelectedRows();
             ...
             //select parent grid row here...
              });

person user250773    schedule 14.04.2015    source источник


Ответы (1)


Да, есть способ сделать это. Вам просто нужно пройти назад вверх по области, чтобы получить доступ к родительской строке и API сетки родительской строки. Помните, что appScope всегда ссылается на родительскую область сетки. Таким образом, в вашей расширяемой дочерней сетке эта родительская область содержит объект строки.

В обработчике onRegisterApi вашей дочерней сетки вы можете получить доступ к родительской строке через: row.grid.appScope.row. Затем вы можете выбрать родительскую строку с помощью: row.grid.appScope.row.grid.api.selection.selectRow(row.grid.appScope.row.entity)

Вот пример кода, который немного его очищает:

onRegisterApi: function (api) {
  api.selection.on.rowSelectionChanged($scope, function (row, event) {
    var parentRow = row.grid.appScope.row;
    if (api.selection.getSelectedRows().length > 0) {
      parentRow.grid.api.selection.selectRow(parentRow.entity);
    }
    else {
      parentRow.grid.api.selection.unSelectRow(parentRow.entity);
    }
  });
}

И демо-планкер: http://plnkr.co/edit/7HFHPTtmcXvgoJCKiRTd?p=preview

person c0bra    schedule 14.04.2015
comment
связанный с этим вопрос, который только что возник: каково решение для противоположного варианта использования, я хочу отменить выбор дочерних/расширенных строк, когда родительская строка не выбрана? - person user250773; 07.05.2015
comment
Извините за ожидание; был далеко. Вам нужно будет каким-то образом зарегистрировать дочернюю сетку с родительской строкой, которую вы можете взломать в обработчике выбора дочерних элементов. Затем добавьте обработчик выбора в родительский элемент для вызова clearSelectedRows() в дочернем API, когда родительская строка не выбрана: plnkr.co/edit/gpii2bixGvgTyBLxtS1M?p=preview - person c0bra; 18.05.2015