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

标签 extjs extjs3

我正在使用 ExtJs 3.4。我在 ExtJs 网格中有一个复选框控件。我想根据存储中的值何时为零来禁用复选框控件。

我已经尝试过这个,但它没有禁用它:

var colModel = new Ext.grid.ColumnModel(
    {
        columns: [
            { id: 'AircraftOid', header: "AircraftOid", width: 100, sortable: true, locked: true, dataIndex: 'AircraftOid', hidden: true },
            { id: 'nNumber', header: "N-#", width: 100, sortable: true, locked: true, dataIndex: 'NNumber' },
            { header: "Make", width: 150, sortable: true, dataIndex: 'Make' },
            { header: "Model", width: 150, sortable: true, dataIndex: 'Model' },
            { header: "Register",
                width: 55,
                sortable: true,
                dataIndex: 'Register',
                xtype: 'checkcolumn'
            }
        ],
        isCellEditable: function (col, row) {
            return false;
        }
    });

var grid = new Ext.grid.GridPanel({
        store: aircraftStore,
        cm: colModel,
        sm: new Ext.grid.RowSelectionModel({ singleSelect: true }),
        viewConfig: {
            forceFit: true
        },
        height: 100,
        split: true,
        region: 'north'
    });

提前致谢。

最佳答案

你的想法是对的。但是...

首先,您要重写列模型的 isCellEditable 方法以防止编辑。但 Grid 不会调用该方法。它仅适用于 EditorGrid

其次,Ext.ux.grid.CheckColumn不处理任何可编辑功能,因为它不是编辑器,它只是一列>.

因此,对于我的项目,我将其修改为编辑器,并添加了 readOnly 属性以防止在普通网格上进行编辑。如果将 readOnly 设置为 true,它将不再可点击。

Ext.ux.grid.CheckColumn = Ext.extend(Ext.grid.Column, {
    processEvent : function(name, e, grid, rowIndex, colIndex) {
        if ( !this.readOnly && name == 'mousedown' ) {
            grid.stopEditing();
            var record = grid.store.getAt(rowIndex);
            var cm = grid.getColumnModel();
            var edit_e = {
                grid: grid,
                record: record,
                field: this.dataIndex,
                value: record.data[this.dataIndex],
                row: rowIndex,
                column: colIndex,
                cancel: false
            };
            if ( grid.fireEvent( 'beforeedit', edit_e ) !== false && !edit_e.cancel ) {
                record.set( this.dataIndex, !record.data[this.dataIndex] );
                edit_e.cancel = null;
                grid.fireEvent( 'afteredit', edit_e );
            }
            return false;
        } else {
            return Ext.grid.ActionColumn.superclass.processEvent.apply(this, arguments);
        }
    },

    editable : false,

    readOnly : false,

    renderer : function(v, p, record){
        p.css += ' x-grid3-check-col-td'; 
        return String.format('<div class="x-grid3-check-col{0}">&#160;</div>', v ? '-on' : '');
    },

    init: Ext.emptyFn
});

Ext.preg('checkcolumn', Ext.ux.grid.CheckColumn);

Ext.grid.CheckColumn = Ext.ux.grid.CheckColumn;

Ext.grid.Column.types.checkcolumn = Ext.ux.grid.CheckColumn;

关于extjs - 如何禁用 ExtJS 网格中的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11440216/

相关文章:

extjs - 使用 Ext JS 进行快速开发

javascript - Javascript 中基于类的框架导致浏览器挂起

extjs - 如何隐藏网格列菜单中的特定列(ExtJS 6.5.3)?

javascript - 仅在同一父级中启用节点拖放

javascript - 包含链接的 ExtJs 网格面板返回 false

grid - 在 Extjs 3 中取消选择网格的行

extjs - JsonStore 加载记录并将其标记为幻像

javascript - ExtJs 4 网格分页

javascript - 在 ExtJS 3 中呈现自定义单选按钮

javascript - 窗口中的可滚动标签面板