【发布时间】:2021-09-16 21:14:42
【问题描述】:
我正在实现一个网格面板,其中最后四列可对大多数行进行编辑。问题是我希望能够禁用编辑,假设第一个 if record.get('status') = 4 已完成,并且只有两列应该是可编辑的。
有没有办法禁止显示这些行的编辑?我可以使用 CellEditing 来做到这一点,但我想继续使用 RowEditing 插件。
问候, 克里斯蒂安
【问题讨论】:
我正在实现一个网格面板,其中最后四列可对大多数行进行编辑。问题是我希望能够禁用编辑,假设第一个 if record.get('status') = 4 已完成,并且只有两列应该是可编辑的。
有没有办法禁止显示这些行的编辑?我可以使用 CellEditing 来做到这一点,但我想继续使用 RowEditing 插件。
问候, 克里斯蒂安
【问题讨论】:
使用beforeedit事件:
grid.on('beforeedit', function(editor, e) {
if (e.colIdx === 0 && e.record.get('status') == 4)
return false;
});
更新
上述解决方案不适用于 rowEditor。
但是,您可以在 beforeedit 上禁用所需的字段。为此,您应该能够访问行编辑插件。将 pluginId 分配给插件:
plugins: [
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 1,
pluginId: 'rowEditing'
})
],
如果满足某些条件,现在只需禁用所需字段:
grid.on('beforeedit', function(editor, e) {
if (e.record.get('status') === 4 ){
grid.getPlugin('rowEditing').editor.form.findField('fieldToDisable').disable();
}
else{
grid.getPlugin('rowEditing').editor.form.findField('fieldToDisable').enable();
});
这里是demo(尝试编辑第一行)。
编辑
如果上面的 JSFiddle 不起作用,试试its updated version。
【讨论】:
I'd like to be able to disable editing on, let's say the first one if record.get('status') = 4。但是,如果您解决了它,只需将其作为答案发布,以便对其他人有所帮助。
(基于前面的例子)另一种方法是配置编辑器的beforeedit监听器:
listeners: {
beforeedit: function(editor, context) {
var form = editor.getEditor().form;
var field = form.findField('column_name');
var status = parseInt(context.record.data.status);
if (status === 4) {field.disable();} else {field.enable();}
}
}
【讨论】:
Ext.define。
由于@Molecular Man 的回答使禁用的列在编辑行编辑时看起来有点有趣,所以我想到了另一种看起来很完美的方法。 您所要做的就是创建一个函数,例如:
function fieldFormat() {
if(isGuest) {
return null; //is not editable
} else {
//how you want the column's field config to be formated
var json = Ext.JSON.decode("{xtype: 'textfield',maxLength: 40}");
return json;
}
}
在网格中,你可以这样写:
var grid = Ext.create('Ext.grid.Panel', {
plugins: [grid_rowEditing],
store: store,
columns: [
{
text : 'Name',
dataIndex: 'name',
field : fieldFormat()
}]
});
当 isGuest 为真时,“名称”字段将不可编辑。当它为假时,它将是可编辑的
【讨论】: