Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Все проблемы с $resource (https://javascript.ru/forum/angular/39501-vse-problemy-s-%24resource.html)

Shitbox2 02.07.2013 13:44

Все проблемы с $resource
 
При работе с $resource, возникли некоторые проблемы. Надеюсь здесь помогут их разрешить или посоветуют, как изменить архитектуру.

1. Не обновляется кэш при обновлении модели. Т.е. ответ сервера кэшируется, но если происходят какие-то изменения с объектом, то они сохраняются только на сервере, а кэш остается старым, что чревато... Можно, конечно, каждый раз очищать кэш, но это не самый красивый вариант. Можно обновлять ячейку кэша, которой соответствует изменившийся элемент, но чаще всего кэшируется запрос query(), т.е. все данные в одной ячейке и тогда нужно их перебирать, искать нужный элемент, обновлять и опять записывать. Слишком громоздко.

2. Что делать, если на запрос списка элементов query() приходит сообщение об ошибке {error: 'Невозможно загрузить коллекцию'}. Ангуляр в этом случае преобразует его в массив ['e', 'r', 'r', 'o', ...]. Как отделить сообщение об ошибке от данных?

Shitbox2 06.07.2013 15:53

Вторая проблема решена.
Данные ошибки можно получить в чистом виде через $then
Resource.query().$then(function(success){ console.log(success.data) });

Или лучший вариант, используя код ошибки (напр., Header('HTTP/1.1 503 Service Unavailable')), можно отловить их в колбэке для ошибок:
Resource.query(function(success){ ... }, function(error){ console.log(error.data) })

DjDiablo 08.07.2013 09:09

По первой проблеме нужен пример кода.

Shitbox2 15.07.2013 20:53

var User = $resource('/user/:userId', {userId:'@id'});
    var users = User.query();
});

users[1].name = 'new name';
users[1].$save;
users[2].$remove();

delete users;

var users = User.query(); //Вот тут должна загружаться кэшированная копия с учетом проделанных ранее изменений


Часовой пояс GMT +3, время: 08:54.