使用 TreeData 功能时如何更新 ag-grid 数据

How update ag-grid data when TreeData feature is used

ag-grid 文档提供了 2 个功能树数据和数据更新:

但我不明白我应该如何对树数据执行数据更新

示例: 我有以下 javascript 数据:

const tvSeries = [
  {
    season: "Season 1",
    episodes: [
      {episode: "s1e1"},
      {episode: "s1e2"},
      {episode: "s1e3"},
      ]
  },
  {
    season: "Season 2",
    episodes: [
      {episode: "s2e1"},
      {episode: "s2e2"},
      {episode: "s2e3"},
      ]
  }
]

并通过

将其设置为网格
 gridApi.setRowData(tvSeries)

每一季都会将行与子行分组 - 它的剧集

现在我想为第一季添加新剧集,所以我这样做了

tvSeries[0].episodes.push({episode: "s1e4"})

我应该如何将此更改通知网格? 如果我打电话 gridApi.setRowData(tvSeries) 再来一次 - 整个网格将被重新绘制,草率且不酷。还有好用的方法

gridApi.updateRowData(rowDataTransaction: RowDataTransaction)

但我无法理解如何在 RowDataTransaction 中描述树的变化

使用 TreeData 功能时,似乎无法部分更新数据。

限制 #1:InMemoryNodeManager 包含禁止更新组集(add/remove/update 组)的守卫:

public updateRowData(rowDataTran: RowDataTransaction): RowNodeTransaction {
    if (this.isRowsAlreadyGrouped()) { return null; }
    ...
}

限制#2:RowRenderer.redrawRows不要强制children刷新重绘组。因此,如果 children 子集发生更改,网格将永远不会意识到它

这两种限制都会导致这样一种情况,即 top-level 组都不能部分更新,而不是他们的 children。留给开发人员的唯一方法是 gridApi.setRowData(),它会重新加载整个网格。