在extjs经典网格中开始编辑单元格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在extjs经典网格中开始编辑单元格相关的知识,希望对你有一定的参考价值。

我正在使用Ext.grid.plugin.CellEditing插件来启用网格单元格的编辑。在一种情况下,我想以编程方式进入特定单元格的编辑模式。它看起来旧的方法是使用startEdit方法:

http://docs.sencha.com/extjs/6.2.1/classic/Ext.grid.plugin.CellEditing.html#method-startEdit

但它现在被标记为已弃用:

使用网格的可操作模式激活单元格内容。开始编辑指定的记录,使用指定的列定义来定义正在编辑的字段。

可操作模式采用布尔值打开/关闭ARIA可操作模式。在打开该模式后,我不知道我需要做什么,实际上开始编辑单元格。有什么建议?

答案

实际上setActionableMode方法有两个参数

@param {Boolean} enabled
@param {Ext.grid.CellContext} position

如何获得CellContext

grid.getView().getPosition(record, grid.getColumns()[0])

在这个FIDDLE中,我使用gridcelleditingsetActionableMode创建了一个演示。我希望这有助于/指导您实现您的要求。

代码链

Ext.application({
    name: 'Fiddle',

    launch: function () {

        Ext.define('MyModel', {
            extend: 'Ext.data.Model',
            fields: ['name', 'email', 'phone']
        });

        Ext.create('Ext.data.Store', {
            storeId: 'myStore',
            model: 'MyModel',
            data: [{
                name: 'Lisa',
                email: 'lisa@simpsons.com',
                phone: '555-111-1224'
            }, {
                name: 'Bart',
                email: 'bart@simpsons.com',
                phone: '555-222-1234'
            }, {
                name: 'Homer',
                email: 'homer@simpsons.com',
                phone: '555-222-1244'
            }, {
                name: 'Marge',
                email: 'marge@simpsons.com',
                phone: '555-222-1254'
            }]
        });

        Ext.create('Ext.grid.Panel', {
            title: 'My Data',
            store: 'myStore',
            columns: [{
                header: 'Name',
                dataIndex: 'name',
                flex: 1,
                editor: 'textfield'
            }, {
                header: 'Email',
                dataIndex: 'email',
                flex: 1,
                editor: {
                    completeOnEnter: false,

                    // If the editor config contains a field property, then
                    // the editor config is used to create the Ext.grid.CellEditor
                    // and the field property is used to create the editing input field.
                    field: {
                        xtype: 'textfield',
                        allowBlank: false
                    }
                }
            }, {
                header: 'Phone',
                flex: 1,
                dataIndex: 'phone'
            }],
            selModel: 'cellmodel',
            plugins: {
                ptype: 'cellediting',
                clicksToEdit: 1
            },
            renderTo: Ext.getBody(),
            tools: [{
                type: 'plus',
                handler: function () {
                    var grid = this.up('grid'),
                        store = grid.getStore(),
                        rec = Ext.create('MyModel', {
                            name: '',
                            email: '',
                            phone:'1234567890'
                        }),
                        context;

                    store.add(rec);
                    //Get Ext.grid.CellContext of first cell using getColumns()[0]
                    context = grid.getView().getPosition(rec, grid.getColumns()[0])

                    //Start editing in first cell
                    grid.setActionableMode(true, context);
                }
            }]
        });
    }
});

以上是关于在extjs经典网格中开始编辑单元格的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将记录添加到 ExtJS 中的网格后切换单元格编辑器

ExtJS 网格:单元格编辑:如果输入的值为 <SAMPLE>,则为空白单元格

ExtJs - 通过单击行中的相应图像来编辑网格单元格

ExtJS 4.2网格单元格编辑如何将列值与组合显示值绑定

使用行编辑器进行编辑时,如何在 extjs 4.1.1 中禁用行的特定单元格?

extjs3 网格单元最大长度输入验证