Выстрелить "afteredit" после редактирования всей строки в сетке ExtJS? - PullRequest
2 голосов
/ 13 апреля 2011

У меня есть сетка редактора ExtJS, в которой есть несколько столбцов.Я хочу изменить данные в записи и автоматически сохранить данные в БД.Но мне просто нужно сохранить данные после завершения редактирования всех ячеек в текущей строке.Я использовал событие «afteredit», но оно сработало сразу после изменения одной ячейки.Как я могу сохранить это событие, чтобы оно не срабатывало, пока я не завершил изменение всех ячеек?Или не могли бы вы предложить другой способ сделать это, а не использовать событие "afteredit"?Большое вам спасибо.

Ответы [ 5 ]

0 голосов
/ 01 октября 2018

Когда событие edit сработало, вы должны проверить updated config, чтобы проверить, все ли столбцы сетки были изменены или нет. После внесения изменений вы можете отправить их на свой сервер.

0 голосов
/ 13 апреля 2011

Вы можете взглянуть на Ext.ux.grid.RowEditor.У него есть событие afteredit, которое срабатывает, когда завершается редактирование строки.

Рабочий пример можно найти по адресу http://dev.sencha.com/deploy/dev/examples/grid/row-editor.html

0 голосов
/ 13 апреля 2011

Вот мой вопрос назад: Вы редактируете все ячейки подряд?Лучшим решением было бы использовать кнопку «Сохранить», чтобы отправить обновленные данные обратно на сервер и сохранить их в БД.

Теперь, если вы настаиваете, что все ячейки в строке будут изменены, вы можетевыполните следующие действия:

В afteredit Обработчик событий:

  1. Получить редактируемую запись (вы можете получить ее по event.record)
  2. Проверьте, все липоля были изменены в записи.Это можно сделать, проверив открытое свойство modified.
  3. Если все поля изменены, перейдите к отправке обновленной записи на сервер для сохранения в БД.
0 голосов
/ 13 апреля 2011

Вы можете использовать событие rowdeselect в модели выбора (при условии, что вы используете Ext.grid.RowSelectionModel. Внутри обработчика событий вы можете проверить, была ли запись изменена, и реагировать соответствующим образом.

var grid = // your grid 
grid.getSelectionModel().on("rowdeselect", function(selModel, rowIndex, record) {
    if (record.dirty) {
        // record has been modified
    }
});
0 голосов
/ 13 апреля 2011

Я думаю, что в вашем случае было бы проще иметь кнопку, которую вы нажимаете, чтобы сохранить сетку. Вы можете получить доступ ко всем измененным записям, позвонив по номеру grid.store.getModifiedRecords() и отправив его в бэкэнд-сервис, а также выполнить массовое обновление вместо обновления одной строки за раз.

...