Backbone JS - удаление модели в интерфейсе REST - PullRequest
2 голосов
/ 04 февраля 2012

Я пишу приложение Backbone, которое должно взаимодействовать с REST API.

Моя проблема возникает, когда пользователь удаляет модель, которая уже была удалена кем-то другим.На мой взгляд, бэкэнд должен просто вернуть успех (200), так как модель все равно удаляется.Но люди, разрабатывающие серверную сторону, придерживаются иного мнения, поэтому я получаю 404. Для сравнения, когда запрос фактически не выполняется - следовательно, модель все еще жива - код ответа 400, или, возможно, 401 для проблем авторизации.

Поскольку я получаю ошибку, я фактически не удаляю модель.Я пытаюсь изменить это поведение: если я получаю ошибку 404 при удалении модели, это следует рассматривать как успех.Но я не совсем уверен, что является наиболее удобным способом справиться с этим.

В идеале я бы хотел избежать использования этой логики внутри model.destroy.Это привело бы к повторению.Я мог бы поместить это в метод destroy суперкласса, но модели все равно переопределяют этот метод, каждый со своей логикой, поэтому он становится беспорядочным.Я бы предпочел, чтобы в этот момент методы model.destroy получили успех, не зная, что фактический ответ был 404.

С другой стороны, я не уверен, как поместить эту логику в Backbone.syncЕсли не считать переписывания всей функции.

Какой самый прозрачный способ преобразовать все 404 ответа на УДАЛИТЬ запросы в успех?

1 Ответ

3 голосов
/ 04 февраля 2012

Это взломать, но следует сделать трюк:

model.destroy({
    error: function(model, resp, options) {
        if (resp.status == 404) {
            resp.status = 200; 
            options.success(model, resp);
        }
     }
})

Кстати, по состоянию на Магистраль 0,9 , destroy() и create() настроены оптимистично.

...