Здравствуйте!
После отправки на сервер запроса на добавление/изменение данных сервер отвечает JSON {“status”:“error”, “message” : “Не указана команда”}
Но DataProcessor не отменяет изменения. В свойствах DataProcessor:
undoOnError:true,
updateFromResponse: true,
По событию ‘onAfterSaveError’: function(id, status, response, details){
в status - “update”.
Нужно действовать через событие onBeforeDataSend?
свойство undo
было активировано на компоненте?
https://docs.webix.com/api__dataprocessor_undoonerror_config.html
Pay attention that the undo property should be enabled for the data component
Да.
undoOnError:true,
updateFromResponse: true,
на самом компоненте (datatable, list) должно быть активировано undo
{
undo: true
}
проверьте
У меня отдельный dataprocessor. Изменения через прибинденную форму
а к какому компоненту привязана форма?
если можно сниппетом пример приведите.
Форма привязана к DataCollection, к ней List. Все реализую через WebixJet, поэтому со сниппетом проблематично
Решил так:
в настройках DataCollection
on:{
'onBeforeAdd': function(id,obj,index){
this.$undo = {id: id, operation:'insert'};
},
'onDataUpdate': function(id,data, old){
this.$undo = {id: old.id, data: old, operation:'update'};
},
'onBeforeDelete': function(id){
this.$undo = {id: id, data:this.getItem(id), operation:'delete'};
}
}
в настройках DataProcessor
on:{
'onAfterSave': function(){ this.config.master.$undo = null; },
'onAfterSaveError': function(id, status, response, details){
if (toothStatesStorage.$undo){
switch (toothStatesStorage.$undo.operation){
case 'update':
StatesStorage.updateItem(StatesStorage.$undo.id,StatesStorage.$undo.data);
break;
case 'insert':
StatesStorage.remove(StatesStorage.$undo.id);
break;
case 'delete':
StatesStorage.add(toothStatesStorage.$undo.data);
break;
default:
webix.message("При сохранении данных что-то пошло не так "+response.message);
}
webix.message("При сохранении данных произошла ошибка "+response.message);
}
toothStatesStorage.$undo = null;
}
Подсмотрел здесь:
https://forum.webix.com/discussion/30272/form-synchronization-server-errors
Осталось приделать изменение id элемента, возвращенное сервером при добавлении и будет всё ок)