You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExtJS 6.5.3 Modern:当其他列值为空时隐藏CheckColumn的CheckCell问题

在ExtJS 6.5.3 Modern中隐藏特定条件的CheckColumn单元格

我懂你遇到的痛点——Modern版的CheckColumn用的是Ext.grid.cell.Check而非默认单元格组件,所以常规的renderer配置确实完全不起作用。要实现当somethingElse字段为null时隐藏复选框单元格,我们得从CheckColumn的底层单元格组件入手,直接控制它的显示逻辑。

这里有两种实用方案,你可以根据项目需求选择:

方案一:自定义可复用的CheckCell组件(推荐)

先创建一个自定义的CheckCell类,重写updateRecord方法来判断关联字段的值,进而控制单元格的显示状态:

Ext.define('YourApp.view.grid.cell.CustomCheckCell', {
    extend: 'Ext.grid.cell.Check',
    alias: 'widget.customcheckcell',

    updateRecord: function(record) {
        // 先执行父类逻辑,确保复选框的初始状态正常加载
        this.callParent(arguments);
        
        // 获取关联字段的值
        const somethingElse = record.get('somethingElse');
        // 当somethingElse为null时隐藏整个单元格元素
        this.element.setDisplayed(somethingElse !== null);
    }
});

然后在你的CheckColumn配置中指定使用这个自定义单元格:

{
    xtype: 'checkcolumn',
    dataIndex: 'isSomething',
    text: '',
    width: 30,
    menuDisabled: true,
    headerCheckbox: false,
    cell: {
        xtype: 'customcheckcell' // 绑定自定义单元格类型
    }
}

方案二:直接在CheckColumn内配置单元格逻辑(快速实现)

如果这个逻辑只在当前列使用,也可以不用单独定义类,直接在cell配置里重写方法:

{
    xtype: 'checkcolumn',
    dataIndex: 'isSomething',
    text: '',
    width: 30,
    menuDisabled: true,
    headerCheckbox: false,
    cell: {
        xtype: 'checkcell',
        updateRecord: function(record) {
            this.callParent(arguments);
            const somethingElse = record.get('somethingElse');
            this.element.setDisplayed(somethingElse !== null);
        }
    }
}

逻辑说明

updateRecord方法会在单元格绑定的记录更新时触发——不管是表格初始加载数据,还是后续记录数据发生变更,都会执行这个逻辑。通过this.element.setDisplayed()可以直接控制整个单元格DOM的显示/隐藏,完美实现你要的动态隐藏效果。

内容的提问来源于stack exchange,提问作者Zoti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:17:31