ExtJS 5.0如何排除grid指定列不受后续显隐控制逻辑影响
ExtJS 5.0 锁定grid列显隐状态的实现方案
ExtJS 5.0 没有原生提供showable: false这类直接锁定显示状态的配置项,可以通过以下3种等效方案实现需求:
方案1:重写目标列的setHidden方法(最彻底的锁定方案)
在beforerender事件初始化两列hidden属性的同时,直接重写列实例的setHidden方法,屏蔽所有外部显隐修改逻辑:
// beforerender事件内的newColumns处理逻辑 newColumns.forEach(column => { // 先按外部变量设置初始显隐状态 column.hidden = yourExternalVariable ? true : false; // 重写setHidden方法,不执行任何修改直接返回列实例 column.setHidden = function() { return this; }; // 同步配置hideable: false,屏蔽表头菜单的隐藏选项 column.hideable = false; });
方案2:监听beforehide/beforeshow事件阻止显隐触发(无侵入可恢复)
如果后续有需要临时放开显隐控制的场景,可以通过事件拦截的方式实现,不会破坏列的原生方法:
newColumns.forEach(column => { column.hidden = yourExternalVariable ? true : false; // 返回false直接阻止隐藏、显示事件触发 column.on('beforehide', () => false); column.on('beforeshow', () => false); column.hideable = false; });
方案3:全局显隐逻辑加判断过滤(推荐,适配性最高)
如果项目中的列显隐逻辑是统一封装的,可以给目标列加自定义标识,全局修改时直接跳过锁定列即可,不会对列本身做任何修改:
- 初始化阶段给目标列加自定义标识
newColumns.forEach(column => { column.hidden = yourExternalVariable ? true : false; // 自定义标识,标记该列显隐状态不可修改 column.isLockedVisibility = true; column.hideable = false; });
- 全局显隐逻辑中增加过滤判断
// 你的原有全局列显隐更新逻辑 function batchUpdateColumnsVisibility(columnList, hiddenStatus) { columnList.forEach(col => { // 遇到锁定列直接跳过修改 if (col.isLockedVisibility) return; // 原有显隐修改逻辑 col.setHidden(hiddenStatus); }); }
内容的提问来源于stack exchange,提问作者Etfrerrr
相关产品推荐
相关产品推荐

