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?
);
现在,网格中有“添加行”的按钮,因此记录可能是新的或旧的。
如果在商店/面板中添加了 新 行,我需要可编辑列b
和 c
。
如果用户试图编辑在创建面板时从数据库中加载的现有行,我只需要可编辑列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 仅编辑网格单元,它是新的的主要内容,如果未能解决你的问题,请参考以下文章