初始加载后,ag-grid刷新列过滤器

时间:2019-03-25 18:27:16

标签: ag-grid

根据https://www.ag-grid.com/javascript-grid-filter-set/ #agreed :“由于用例过多,因此网格无法为您更新过滤器...”。

我正在使用服务器端数据源和无限分页查询大量数据。尽管在初始加载时,我可能会确信过滤器会列出所有可用的“选择”,但我希望能找到一种解决方案,以便确定某个频率/事件“重新加载”过滤器。

我正在尝试使用通过调用resetFilterValues()返回的对象的gridOptions.api.getFilterInstance(id)方法。

使用服务器端数据源时,我收到以下console.error输出:

ag-Grid: Set Filter cannot initialise because you are using a row model that does not contain all rows in the browser. Either use a different filter type, or configure Set Filter such that you provide it with values (Source ag-grid-enterprise.min.js:555

注意:具有异步值加载的values方法可以出色地工作,并且是根据建议编写的,例如回调有参数的params.success。

我使用以下方法将筛选器选项加载到列标题中:

{
    headerName: 'Something',
    field: 'SOMETHING',
    width: 200,
    suppressMenu: false,
    suppressFilter: false,
    filter: 'agSetColumnFilter',
    filterParams: {
        values: function (params) {
            someAsyncMethodReturningAPIResultsAsArray();
        }
        newRowsAction: 'keep'
    },
    menuTabs: ['filterMenuTab']
}

然后我尝试使用以下代码在以后的时间(例如,在网格外部按下按钮时)重新加载过滤器:

var filter = gridOptions.api.getFilterInstance(id);
filter.resetFilterValues();

此代码会导致上面显示的错误。

问:有谁知道如何配置Set Model来返回错误消息中所述的行?是否有更好的方法来解决任何有经验的人的问题?

谢谢

1 个答案:

答案 0 :(得分:0)

下面这段代码可以在postProcessPopup回调中执行,每次打开弹窗时都会调用values()中定义的filterParams函数

var filter = gridOptions.api.getFilterInstance(id);
filter.refreshFilterValues();

注意refreshFilterValues 函数在这里起到了作用。它在 v24 及更高版本中可用。对旧版本不太确定。