使用 TreeData 功能时如何更新 ag-grid 数据
How update ag-grid data when TreeData feature is used
ag-grid 文档提供了 2 个功能树数据和数据更新:
- https://www.ag-grid.com/javascript-grid-tree/?framework=all#gsc.tab=0
- https://www.ag-grid.com/javascript-grid-data-update/?framework=all#gsc.tab=0
但我不明白我应该如何对树数据执行数据更新
示例:
我有以下 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(),它会重新加载整个网格。
ag-grid 文档提供了 2 个功能树数据和数据更新:
- https://www.ag-grid.com/javascript-grid-tree/?framework=all#gsc.tab=0
- https://www.ag-grid.com/javascript-grid-data-update/?framework=all#gsc.tab=0
但我不明白我应该如何对树数据执行数据更新
示例: 我有以下 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(),它会重新加载整个网格。