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

时间:2017-08-04 09:14:52

标签: javascript ag-grid

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)再一次 - 整个网格将被重绘,它很邋and而且不酷。有用的方法

gridApi.updateRowData(rowDataTransaction: RowDataTransaction)

但我无法理解如何在RowDataTransaction

中描述树更改

1 个答案:

答案 0 :(得分:0)

使用TreeData功能时,看起来无法部分更新数据。

限制#1:InMemoryNodeManager包含禁止更新组集的保护(添加/删除/更新组):

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

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

这两种限制都会导致一种情况,即顶级群体既不能是部分更新者,也不能是他们的孩子。开发人员唯一的方法是 gridApi.setRowData(),它会重新加载整个网格。