Extjs Grid-禁用特殊行上的某些复选框

Posted

技术标签:

【中文标题】Extjs Grid-禁用特殊行上的某些复选框【英文标题】:Extjs Grid- disable some checkbox on special row 【发布时间】:2013-06-07 02:35:33 【问题描述】:

我有一个简单的gridpanel 和一个column 使用xtype:checkcolumn

Ext.define('Ext.abc.grid', 
     extend: 'Ext.grid.Panel',     
     columns: [
        
            text: 'id', dataIndex: 'id'
        ,     
         text: 'status', dataIndex: 'abc', 
          xtype: 'checkcolumn',

            /*viewConfig:  
                getClass: function(Value, metaData, record)

                )
            ,*/
            listeners:
                beforecheckchange: function(column, row, checked, opts) 
                ,
                checkchange:function(cc,ix,isChecked)
                
            
        
    ]
);

我想按列 id 禁用特殊行上的一些复选框。是否可以?我怎样才能做到这一点?谢谢。

【问题讨论】:

【参考方案1】:

我查看了Ext.grid.column.CheckColumn 的代码,我认为实现您想要的更少侵入性的方法是:

    使用经过调整的模型,防止在所需条件下进行修改。

    覆盖renderer 列,为不可检查的记录添加禁用类。

例子:

// Using anonymous model class just to show that you can do this,
// if you don't need to define an application-wide model
var model = Ext.define(null, 
    extend: 'Ext.data.Model'

    ,fields: ['id', 'status', 'checkable']

    // example data    
    ,proxy: 
        type: 'memory'
        ,reader: 'array'
        ,data: [
            [1, true, true]
            ,[2, true, false]
            ,[3, false, true]
            ,[4, false, false]
        ]
    

    // 1. Prevent modification on certain conditions    
    ,set: function(field, value) 
        if (field === 'status' && !this.get('checkable')) 
            return null;
         else 
            return this.callParent(arguments);
        
    
);

Ext.widget('grid', 
    renderTo: Ext.getBody()
    ,height: 200
    ,store: 
        model: model
        ,autoLoad: true
    
    ,columns: [
        text: 'id'
        ,dataIndex: 'id'
    , 
        text: 'status'
        ,dataIndex: 'status'
        ,xtype: 'checkcolumn'

        // 2. Custom renderer to reflect "checkability"        
        ,renderer: function(value, meta, record) 
            var cssPrefix = Ext.baseCSSPrefix,
                cls = [cssPrefix + 'grid-checkcolumn'];

            if (
                this.disabled 
                // this is the added condition for disabledCls
                || !record.get('checkable')
            ) 
                meta.tdCls += ' ' + this.disabledCls;
            
            if (value) 
                cls.push(cssPrefix + 'grid-checkcolumn-checked');
            
            return '<img class="' + cls.join(' ') + '" src="' + Ext.BLANK_IMAGE_URL + '"/>';
        
    ,
        text: 'modifiable'
        ,dataIndex: 'checkable'
        ,xtype: 'booleancolumn'
    ]
);

【讨论】:

我尝试在jsfiddle.net/KQdvJ 运行您的示例代码以查看您的示例,但它不起作用,对不起,我是 extjs 的新手 CheckColumn 是一个ux in 4.1.1,已集成到4.2.0 的框架中。所以你需要它:jsfiddle.net/rixo/KQdvJ/1 此外,在 4.1.1 中,检查列没有禁用状态的样式,并且渲染方法已更改。 谢谢你,我找到了这个帖子mysamplecode.com/2012/02/…。那可能像你一样,使用 css。我在努力…… @rixo 我想完全隐藏它,而不仅仅是禁用它。最好的方法是什么?

以上是关于Extjs Grid-禁用特殊行上的某些复选框的主要内容,如果未能解决你的问题,请参考以下文章

Extjs checkcolumn 禁用某些行,基于值

如何禁用 ExtJS 网格中的控件?

在 Ag-grid 中禁用复选框选择

ExtJS Grid:为啥焦点线也被选中了?

如何将复选框列添加到 Extjs Grid

Extjs中取消表头checkbox复选框选中状态