ag-grid:使用 'serverSide' rowModel 刷新当前视图

ag-grid: Refresh current view with 'serverSide' rowModel

非常简单的问题,似乎找不到答案:

使用 gridOptions:{ rowModel: 'serverside'} 时,数据通过 getRows 回调加载。

但是我们如何简单地 "refresh" 网格,以便它再次执行最后一个 getRows 调用并更新数据?

现在看来,如果不调用 gridApi.purgeServerSideCache() 就绝对不可能做到这一点,但这会导致所有打开的行组崩溃,出于明显的用户体验原因,我想避免这种情况。

这份 link 到 ag-grid 的文档应该会有帮助:https://www.ag-grid.com/javascript-grid-server-side-model-grouping/#preserving-group-state

基本上,文档声明使用 gridApi.purgeServerSideCache() 是强制重新加载的首选方法,但他们继续说以下内容应该可以解决您的 UX 问题:

Preserving Group State

It may be necessary to expand groups to a desired initial state or to restore the grid to a previous state after purging / reloading data.

This can be achieved by expanding row nodes as blocks are loaded in the Server-side Datasource. The following snippet outlines a possible approach:

 function getRows(params) {
>     // 1) get data from server
>     var response = getServerResponse(params.request);
> 
>     // 2) call the success callback
>     params.successCallback(response.rowsThisBlock, response.lastRow);
> 
>     // 3) to preserve group state we expand any previously expanded groups for this block
>     rowsInThisBlock.forEach(row => {
>         if (expandedGroupIds.indexOf(row.id) > -1) {
>             gridOptions.api.getRowNode(row.id).setExpanded(true);
>         }
>     }); 
>  }

Notice that in step 3, newly loaded row nodes for the current block are expanded if they are defined in expandedGroupIds, which is an array of group keys maintained by the application. This will have a cascading effect as expanding a group will cause new block(s) to load.

In order to easily look up group row nodes, implementing the following callback is recommended: gridOptions.getRowNodeId().