Обновить поля RowEditing при изменении его значения
Я использую Extjs 4.2, поэтому у меня есть сетка с плагином rowediting. Все отлично работает, я хочу знать, как я могу обновить одно значение поля, в зависимости от другого поля. Я имею в виду, например, если в моей сетке у меня есть field1 и field2, мне нужно обновить field3
значение с field1
+ field2
значения, когда один из них был изменен. Обычно, используя jquery, мы можем кодировать событие изменения для каждого из полей, но как я могу сделать это при событии редактирования строки?
Это возможно?
3 ответа
Ты можешь использовать edit
события rowedit
следующим образом:
Sencha Fiddle: Grid RowEditor - Изменить значение ячейки на основе условия
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/).
- Дважды щелкните поле электронной почты и измените имя.
- Обработчик не будет обновлять поле результата, так как e.field теперь будет "email", а не "name".
То есть редактор строк считает поле, на котором вы щелкнули, редактируемым полем. Это не имеет смысла, так как это редактор строк и, скорее всего, он используется для редактирования нескольких полей в строке.
Чтобы получить список только измененных полей, используйте e.record.getChanges()
, Это даст вам только измененные поля и их новые значения.