ExtJS 仅编辑网格单元,它是新的

Posted

技术标签:

【中文标题】ExtJS 仅编辑网格单元,它是新的【英文标题】:ExtJS edit grid cell only it is new 【发布时间】:2013-02-25 21:39:55 【问题描述】:

我有一个网格:

Ext.create('Ext.grid.Panel', 
    id: 'grid',
    store: this.store,
    columns: [
        dataIndex: 'a'
    ,
        dataIndex: 'b'
    ,
        dataIndex: 'c'
    ],
    selModel: 
        selType: 'cellmodel'
    ,
    plugins: [cellEditing]
)

其中使用单元格编辑:

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', 
    clicksToEdit: 1,
    listeners: 
        beforeedit: function(obj) 
                // Something goes here?
           
    
);

现在,网格中有“添加行”的按钮,因此记录可能是新的或旧的。

如果在商店/面板中添加了 行,我需要可编辑列 bc。 如果用户试图编辑在创建面板时从数据库中加载的现有行,我只需要可编辑列c

我怀疑我需要向beforeedit 侦听器添加一些内容,但我对 ExtJS 和 javascript 很陌生,所以我不知道如何描述这些条件。

【问题讨论】:

【参考方案1】:

您绝对是在正确的轨道上。 'beforeedit' 事件允许您通过返回 false 来阻止编辑操作。如果您查看它的文档,您会看到您收到了一个对象,该对象提供了有关单元的所有所需信息:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.plugin.CellEditing-event-beforeedit

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', 
    clicksToEdit: 1,
    listeners: 
        beforeedit: function(editor, event, opts) 
            if (!event.record.phantom && event.column.dataIndex == 'columnC') 
                return false;
            
           
    
);

phantom 是一个记录属性,用于了解记录是新创建的(尚未同步到服务器)还是最初与存储中的所有其他记录一起加载。

【讨论】:

我最终做了类似的事情。我在模型中添加了一个字段,该字段仅在插入项目时设置。我认为这可能是更好的方法,因为我可以更好地控制何时设置/不设置。

以上是关于ExtJS 仅编辑网格单元,它是新的的主要内容,如果未能解决你的问题,请参考以下文章

在激活 extjs 4 时清除可编辑的网格单元

如何验证 Extjs 可编辑网格单元

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

如何在 extjs 网格(单元格编辑)中将完整列显示为可编辑?

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

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