Прямоугольная вставка моделей в коллекцию после поста

Я вставляю модель в рестангулярную коллекцию с сообщением

var collectionService = restAngular.all('collection');
var collection = collectionService.getList();

var item = {
   title : "A title"
};

collection.post(item);

Теперь я мог бы сделать вместо последнего утверждения:

collection.post(item).then(function(newItem) {
    collection.push(newItem);
});

Почему вставляемая модель не вставляется в коллекцию по умолчанию? Есть причина для этого? Я пропустил звонок или что? Я хотел бы избежать повторного получения коллекции после того, как я вставил модель


person pfried    schedule 19.11.2013    source источник


Ответы (1)


Во-первых, поведение этих двух методов отличается:

collection.post(item) — он отправляет запрос POST на сервер, но не добавляет элемент в коллекцию, хотя post() вызывается для объекта коллекции. Метод post() также доступен для объекта элемента.

collection.push(item) — элемент добавляется в коллекцию, но запрос не отправляется на сервер. Этот метод используется, если вы хотите отложить отправку обновления на сервер до дальнейших действий или если вы хотите обновить коллекцию с уже добавленным элементом на сервере, чтобы сохранить синхронизацию коллекции.

Если вы хотите отправить запрос POST на сервер, а также добавить элемент в коллекцию без обновления всего списка, вы должны использовать приведенный ниже код (тот же, что и в вашем вопросе)

collection.post(item).then(function(newItem) {
    collection.push(newItem);
});    


Решение о структуре

Why is the inserted model not inserted into the collection by default?

Представьте, если collection.post(item) и collection.push(item) добавляют элемент в коллекцию, а также отправляют запрос POST на сервер. Что делать, если соединение не установлено или произошла ошибка сервера? Невозможно сообщить об ошибке или обработать ошибку, а данные, добавленные в коллекцию, являются устаревшими данными и не синхронизированы с сервером. Чтобы избежать такого рода ошибок, фреймворк заставляет разработчиков добавлять элемент в коллекцию только в случае успешного выполнения POST.

Вы найдете эту модель программирования не только в Restangular, но и в подобных фреймворках REST, таких как «ng-resource». Эта модель программирования помогает уменьшить количество ошибок и гарантирует, что элемент, добавленный в коллекцию, является законным, а не плохими устаревшими данными.

person Kalyan    schedule 18.06.2016