Синхронизация магазина: много удалений, некоторые не удалось

У меня есть магазин, в котором пользователь может удалить несколько записей с одним 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, так что веб-интерфейс узнает, что удаление этой записи не удалось.

Другие вопросы по тегам