Обновить поля 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 полностью зависит от поля, по которому щелкнули, чтобы редактировать строку.

Чтобы проиллюстрировать проблему:

  1. В предыдущем ответе откройте ссылку на скрипку ( https://fiddle.sencha.com/).
  2. Дважды щелкните поле электронной почты и измените имя.
  3. Обработчик не будет обновлять поле результата, так как e.field теперь будет "email", а не "name".

То есть редактор строк считает поле, на котором вы щелкнули, редактируемым полем. Это не имеет смысла, так как это редактор строк и, скорее всего, он используется для редактирования нескольких полей в строке.

Чтобы получить список только измененных полей, используйте e.record.getChanges(), Это даст вам только измененные поля и их новые значения.

Другие вопросы по тегам