Версия ExtJS: ext-4.0.7-gpl
.
При синхронизации хранилища сервер возвращает мне тот же объект в формате JSON, но заполненный сгенерированными идентификаторами, которые мне нужно поместить в данные моего хранилища.Идентификаторы находятся во вложенных объектах, например:
{
"id": 46,
"name": "Excel",
"typeExt": [{
"ext": "xls",
"id": "137",
"isMain": "false",
}, {
"ext": "xslx",
"id": "136",
"isMain": "false",
}]
}
Таким образом, идентификаторы 137
и 136
генерируются на стороне сервера.
Я пытаюсь сделать это впрокси магазина (редактирование: тип Ajax) (что само по себе может быть ошибочным):
proxy.afterRequest = function(request) {
if (request.action === 'create' && request.records.length == 1) {
me.store.autoSync = false;
var created = Ext.JSON.decode(request.operation.response.responseText);
request.records[0].set('id', created.id);
request.records[0].set('typeExt', created.typeExt);
//request.records[0].modified = {};
//request.records[0].dirty = false;
me.store.autoSync = true;
}
if (request.action === 'update' && request.records.length == 1) {
var updated = Ext.JSON.decode(request.operation.response.responseText);
me.store.autoSync = false;
request.records[0].set('typeExt', updated.typeExt);
me.store.autoSync = true;
}
};
См. закомментированные варианты.
Если я не установлю autoSync
на false
, он будет зацикливаться бесконечно.
Если я не очищу эти read-only
поля modified
и dirty
,измененные записи включаются в следующий запрос синхронизации, если я отредактировал другую запись, она отправляет Array записей, которые нарушают мою службу на стороне сервера.
Если я очищаю dirty
иmodified
Как показано в закомментированных строках, операция обновления работает только один раз.Я нажимаю кнопку «Обновить» в диалоговом окне плагина RowEditing, но он никогда не отправляет нужный запрос на сервер во второй раз.
В последнем случае, я думаю, я что-то сломал, отредактировав вручную поля только для чтения, но не могуне найти что.
Как люди обычно решают подобные проблемы?
PS.
request.records[0].commit(true); || request.records[0].editing = false;
|| request.records[0].beginEdit();
Испытывались также без перерыва.