我正在使用 Extjs 4.2,所以我有一个带有行编辑插件的网格。一切正常,我想知道如何根据另一个字段更新一个字段值。我的意思是,例如,如果我的网格中有 field1 和 field2,那么当其中一个值被更改时,我需要用 field1
+ field2
值更新field3
值。通常使用 jquery 我们可以为每个字段编写一个更改事件,但是我如何在行编辑事件上执行此操作?
这可能吗?
您可以使用rowedit
edit
事件,如下所示:
煎茶小提琴:网格行编辑器 - 根据条件更改单元格值
grid.on('edit', function(editor, e){
/**
* here I am checking the column name to complete process
* you change what you want
*/
if (e.field == "name") {
e.record.set('result', parseInt(e.record.get('dummy')) + parseInt(e.record.get('age')));
}
})
您必须将编辑器添加到列中,编辑器就像任何组件一样,具有侦听器,类型等。 然后添加一个更改侦听器
例:...
{
header: 'HeaderName',
dataIndex: 'man_peso',
type: 'number',
width: 50,
editor: {
enableKeyEvents: true,
listeners: {
change: function(c, e, eOpts) {
//here you can modify others components
}
},
xtype: 'textfield',
maskRe: /[0-9.]/,
maxLength: 16
},
。
使用 RowEditor 时,e.field 值完全取决于单击以编辑行的字段。
为了说明问题:
- 在上一个答案中,打开小提琴链接(https://fiddle.sencha.com/#fiddle/4pj)。
- 双击电子邮件字段并更改名称。
- 处理程序不会更新结果字段,因为 e.field 现在将是"电子邮件"而不是"名称"。
也就是说,行编辑器将您单击的字段视为已编辑的字段。这没有意义,因为它是"行"编辑器,最有可能用于编辑行中的多个字段。
若要获取仅已修改字段的列表,请使用 e.record.getChanges()
。这些将仅为您提供修改后的字段及其新值。