Синхронизация магазина: много удалений, некоторые не удалось
У меня есть магазин, в котором пользователь может удалить несколько записей с одним destroy
операция.
Теперь некоторые из этих записей заблокированы в базе данных (потому что над ними работает кто-то другой) и, следовательно, не могут быть удалены. Как сервер может сообщить внешнему интерфейсу, что удаление записей с Id a, b, c прошло успешно, но что записи с Id x, y, z не могут быть удалены и должны быть перемещены обратно в хранилище и отображены в сетке?
Магазин ExtJS должен знать после sync()
какие записи были действительно удалены на стороне сервера, а какие нет.
1 ответ
Я думаю, что нет прямого решения этой проблемы. Я выбрал следующий обходной путь:
У записей теперь есть флаг IsDeleted, который установлен в false
по умолчанию:
fields:[{
...
},{
name: 'IsDeleted'
type: 'bool',
defaultValue: false
В магазине есть фильтр, который скрывает записи, где установлен флаг true
:
filters:[{
property:'IsDeleted',
value:false
}]
Когда пользователь решает удалить, я не remove
записи из магазина, вместо этого я установил IsDeleted
флаг для true
на этих записях. Фильтр заставляет пользователя думать, что запись была удалена.
Когда магазин синхронизируется, он делает update
операция, а не destroy
операция. Таким образом, конечная точка обновления API затем должна удалить все записи, где IsDeleted
передается как true
, Если он не может удалить запись из базы данных, соответствующий json, возвращенный клиенту, получает IsDeleted
установлен в false
, так что веб-интерфейс узнает, что удаление этой записи не удалось.