Я озадачен.
У меня есть редактируемый OnDemandGrid, и под ним у меня есть коллекция dstore / Rest, указывающая на мой бэкэнд (в PHP).
OnDemandGrid смешивается с редактором … Я могу редактировать свои данные, но не могу сохранить их. На стороне сервера я получаю запрос «POST» для вставки полной строки в коллекцию … И я никогда не получаю обновления.
Должен ли я вместо этого получить запрос PUT? Я использую идентификаторы в данных …
Это часть на стороне клиента:
function (...)
{
var EditGrid = declare([ OnDemandGrid, Keyboard, Editor ]);
var coll = new Rest({
target: 'my.php/x/',
idProperty: 'id',
rangeStartParam: 'range',
rangeCountParam: 'limit',
sortParam: 'sort'
});
var grid = new EditGrid({ columns: {
user_name:{
label: 'User name',
editor: 'text',
editOn: 'click, dbclick',
autoSave: true,
}},
collection: coll }, 'grid' );
grid.startup();
}
Я правильно получаю запрос GET для заполнения таблицы … Затем, после редактирования строки и нажатия «return», я получаю POST!
Серверная сторона немного сложнее, чтобы показать здесь … В основном, при GET я делаю SQL-запрос и json-ize результаты, в то время как на POST я просто возвращаю это:
http_response_code(201);
header("location: ".$_SERVER['PATH_INFO'].$id);
Где $ id — это тот же идентификатор, который я получил из запроса …
После POST я больше ничего не получаю. И в данных POST я только получаю копию старой, неизмененной строки … Я никогда не получаю «новые» отредактированные данные.
Мне кажется, что я должен получить запрос PUT в какой-то момент … Я пробовал отладчик браузера, журналы сервера, ничего нигде.
Кто-нибудь может помочь мне здесь?
Я наконец исправил это.
Это очень запутанный и очень мало задокументированный весь этот беспорядок. Мне пришлось копаться в браузере отладчика и немного исходного кода dgrid / Rest.
Так что проблема была в моем REST бэкэнде. Оказывается, dgrid выполняет GET перед запросом PUT / POST, запрашивающим изменение элемента, и выполняет GET только с одной записью, запрашивая конкретный «id». Это имеет смысл.
Ну, мой бэкэнд вернул бы ARRAY с одним элементом в формате JSON. Это была ошибка! Это не правильно анализируется dgrid, и это приводит к POST вместо PUT.
Как только я исправил бэкэнд GET, чтобы он возвращал один элемент JSON вместо массива с одним элементом JSON внутри, dgrid начал отправлять правильные PUT.
Других решений пока нет …