Автоматическое сохранение через XMLHttpRequest из EditorGridPanel в ExtJS 3.0?

StackOverflow https://stackoverflow.com/questions/1202918

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть EditorGridPanel в Ext JS 3.0, заполняемая через HttpProxy и JsonReader, и у меня есть редактируемый столбец "рабочий" - я могу отредактировать значение, и оно помечает его как грязное.

Теперь, как мне заставить его после редактирования ячейки отправлять XMLHttpRequest на сервер с несколькими базовыми параметрами, полем ID строки, измененным именем столбца и новым значением?

После того, как запрос сделан, обновление на стороне сервера выполняется легко.Но никакое количество Google и копание в тривиальных примерах EditGridPanel в памяти не помогает заставить EditGridPanel выполнить вызов.

То, чего я не ищу:

  1. REST - просто обновите через обычный GET или POST
  2. Вставляйте новые записи или удаляйте строки - обновления только на данный момент.
  3. Пакетные обновления - только одно редактирование ячейки за раз.
  4. Куча кода - это должно быть тривиально, как Ajax.InPlaceEditor в Scriptaculous
Это было полезно?

Решение

Наконец-то я понял это...просто нужен был автор для моего магазина:

var ds = new Ext.data.JsonStore({
    autoSave:       true,
    url:            "ajax-handler.aspx",
    method:         "POST",
    timeout:        120000,
    root:           "rows",
    totalProperty:  "results",
    idProperty:     "primarykeyvalue",
    fields:         previewColumnConfig,
    baseParams:     {
        now:        (new Date()).getTime()
        },
    writer: new Ext.data.JsonWriter({
        encode:     true,
        listful:    false
        })
    });

Примечания:

  • Базовый параметр "now" предназначен для обхода кэширования результатов AJAX "некоторыми браузерами" (попробуйте угадать)
  • "encode" возвращает переменные POST, а не просто голый результат JSON в POST.
  • "listful" отключен, поскольку пользователь редактирует только одну строку / столбец за раз, нет необходимости создавать серверный анализатор для ввода массива, он может ожидать только одну строку.
  • Да, у меня есть действительно длинный значение таймаута.
  • previewColumnConfig определен заранее, хранит определения моих столбцов.

Другие советы

Вы можете использовать событие afteredit для Ext.grid.EditorGridPanel, которое сработает после размытия редактора. Также вы можете установить метод периодической (интервальной) проверки при возникновении события beforeedit и очистить его при возникновении события afteredit.

Пример для afteredit:

EditorGridPanel.getColumnModel().getCellEditor(column).on('afteredit', function() {
    //do ajax call for the update.
});

Дайте мне знать, если вам нужен пример для периодической проверки, и я напишу его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top