Extjs Grid- disable some checkbox on special row

前端 未结 1 1634
伪装坚强ぢ
伪装坚强ぢ 2020-12-20 18:53

I have a simple gridpanel with a column using xtype:checkcolumn

Ext.define(\'Ext.abc.grid\', {
     extend: \'Ext.         


        
相关标签:
1条回答
  • 2020-12-20 19:24

    I took a look into the code of Ext.grid.column.CheckColumn, and I think the less intrusive way to achieve what you want is to:

    1. Use a tweaked model that prevent modification on the desired condition.

    2. Override the column renderer to add the disabled class for record that are not checkable.

    Example:

    // 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'
        }]
    });
    
    0 讨论(0)
提交回复
热议问题