首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无触发事件的ag-网格集过滤器和排序模型

无触发事件的ag-网格集过滤器和排序模型
EN

Stack Overflow用户
提问于 2018-10-07 23:35:10
回答 4查看 3.1K关注 0票数 14

我正在通过api更新排序和筛选模型:

代码语言:javascript
运行
复制
this.gridApi.setFilterModel(filterModels);
this.gridApi.setSortModel(sortModels);

这方面的问题是,我有一个服务器请求绑定到更改,即使这两种类型&过滤器,所以当用户更改,然后数据被更新。这意味着,当我更改代码模型时,比如恢复状态或重置筛选器,它会导致多个请求。

有没有一种在不触发事件的情况下更新筛选器/排序模型的方法?

我看到有一个ColumnEventType参数,但看不出它是如何工作的。我是否可以在事件处理程序中指定一些变量,以使它们忽略非用户生成的调用?

我正在尝试管理URL状态,所以当url查询参数更改时,我的代码设置了网格中的模型,但这最终导致页面多次重新加载,因为在设置模型时调用了onFilter和onSort事件,而且我没有办法阻止这种情况。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-12 14:17:49

此时,您必须亲自管理它,即在调用setModel之前,在应用程序的共享部分(可能是全局变量)中以某种方式将其标记出来。

然后,当你对这些事件做出反应时,检查它的遗产,猜猜它从哪里来。

请注意,目前我们已经为列事件添加了源代码,但是它们还不是模型事件的源,我们计划添加它们,但是我们没有ETA。

希望这能有所帮助

票数 3
EN

Stack Overflow用户

发布于 2019-04-10 11:36:39

我不得不解决类似的问题。我找到了适合我这种情况的解决方案。也许这能帮上忙。

代码语言:javascript
运行
复制
for (let j = 0; j < orders.length; j++) {
    const sortModelEntry = orders[j];
    if (typeof sortModelEntry.property === 'string') {
    const column: Column = this.gridColumnApi.getColumn(sortModelEntry.property);
    if (column && ! column.getColDef().suppressSorting) {
       column.setSort(sortModelEntry.direction.toLowerCase());
       column.setSortedAt(j);
     }
}
this.gridApi.refreshHeader();

其中,orders是键值对象的数组,其中键是列的名称,值是排序指令(asc/desc)。

没有刷新的Set过滤器是复杂的

代码语言:javascript
运行
复制
for (let j = 0; j < filters.length; j++) {
   const filterModelEntry = filters[j];
   if (typeof filterModelEntry.property === 'string') {
      const column: Column = this.gridColumnApi.getColumn(filterModelEntry.property);
      if (column && ! column.getColDef().suppressFilter) {
         const filter: any = this.gridApi.getFilterApi(filterModelEntry.property);
         filter['filter'] = filterModelEntry.command;
         filter['defaultFilter'] = filterModelEntry.command;
         filter['eTypeSelector'].value = filterModelEntry.command;
         filter['filterValue'] = filterModelEntry.value;
         filter['filterText'] = filterModelEntry.value;
         filter['eFilterTextField'].value = filterModelEntry.value;
         column.setFilterActive(true);
      }
   }
}

过滤器中的属性:

  • 属性-列的名称
  • 命令过滤操作(包含、等于、.)
  • 用于过滤器的值-值
票数 3
EN

Stack Overflow用户

发布于 2020-11-27 06:20:47

对于任何在2020年11月寻求解决这一问题的人来说,利用onFilterModified()可能会有所帮助。这是在onFilterChanged()之前调用的,因此在这里设置一个值(例如。( hasUserManuallyChangedTheFilters = false等)在过滤器更改事件中检查相同的内容是一种可能的解决办法。尽管我还没有发现类似于onSortChanged()事件的地方,但是在将排序应用到网格之前会调用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52693811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档