2009-07-29 3 views
3

У меня есть редакторGridPanel в Ext JS 3.0, заполненный через HttpProxy и JsonReader, и у меня есть редактируемый столбец «working» - я могу редактировать значение, и он обозначает его как грязный.Автосохранение через XmlHttpRequest из EditorGridPanel в ExtJS 3.0?

Теперь, как я могу получить его после изменения ячейки, отправьте XmlHttpRequest на сервер с помощью нескольких базовых параметров, поля идентификатора строки, имени столбца и нового значения?

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

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

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

ответ

2

Я наконец понял это ... просто нужен писатель в моем магазине:

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 
     }) 
    }); 

Примечания:

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

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

Пример afteredit:

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

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

+0

Это вариант, на который я смотрел, но что-то не так. Может быть, я слишком много даю людям ExtJS, но я был бы удивлен, если бы не было простого способа передать сетку отправить запрос самому определенному URL-адресу и использовать ответ ACK/NAK с сервера, чтобы очистить грязный флаг. Есть опция «автосохранения», но я не могу сделать все, что требуется для выполнения моей работы. – richardtallent

+0

В конце концов, прямо на домашней странице «Поддержка Direct, CRUD и REST для упрощенной связи с сервером» является рекламируемой функцией. Несомненно, один из трех включает простой серверный вызов? – richardtallent

Смежные вопросы