Во-первых, поведение этих двух методов отличается:
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