ExtJS 6.2 Grid过滤器触发过于频繁如何调整触发延迟或时机?
ExtJS 6.2 Classic Grid字符串过滤器触发频率优化方案
以下两种实现方案可匹配你的需求:
方案1:调整输入防抖间隔(快速满足基础需求)
ExtJS 6.2的字符串过滤器默认自带输入防抖逻辑,默认触发间隔为500ms,你可以直接在过滤器配置中新增updateBuffer参数自定义间隔时长,无需修改其他逻辑:
{ type: 'string', dataIndex: 'assetId', value: '', active: false, // 单位为毫秒,可根据业务需求调整,示例为输入结束1秒后再触发过滤 updateBuffer: 1000 }
方案2:仅在过滤菜单关闭时触发重载(匹配理想需求)
如果需要完全避免输入过程中触发请求,可以禁用默认实时过滤逻辑,监听菜单关闭事件手动触发重载。如果你们的Grid是全局复用的组件,可直接把逻辑封装到基类中,一次修改全量生效:
第一步:修改过滤器配置,禁用自动触发
{ type: 'string', dataIndex: 'assetId', value: '', active: false, // 禁用输入时自动触发过滤 autoReload: false }
第二步:给Grid添加菜单关闭监听
Ext.define('YourCustomBaseGrid', { extend: 'Ext.grid.Panel', // 原有Grid复用配置保持不变 plugins: [{ ptype: 'gridfilters' }], listeners: { afterrender: function(grid) { const filterPlugin = grid.getPlugin('gridfilters'); // 遍历所有字符串类型过滤器统一绑定逻辑,不用单独指定字段 filterPlugin.getFilters().each(function(filter) { if (filter.type === 'string') { // 记录初始值避免无意义请求 filter.lastAppliedValue = filter.getValue(); // 监听菜单关闭事件 filter.menu.on('hide', function() { const currentVal = filter.getValue(); if (currentVal !== filter.lastAppliedValue) { filter.setActive(!!currentVal); filter.lastAppliedValue = currentVal; grid.getStore().load(); } }); } }); } } });
内容的提问来源于stack exchange,提问作者Entropy
相关产品推荐
相关产品推荐

