Restangular inserting models to collection after post

夙愿已清 提交于 2019-12-23 11:55:27

问题


I am inserting a model in a restangular collection with post

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

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

collection.post(item);

Now i could do instead of the last statement:

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

Why is the inserted model not inserted into the collection by default? Is there a reason for this? Am i missing a call or something? I would like to avoid fetching the collection again after i inserted the model


回答1:


Firstly, the behavior for the two methods are different:

collection.post(item) - It sends a POST request to the server but doesn't add item to the collection although post() is being called on collection object. The post() method is also available on an element object.

collection.push(item) - Adds the item to the collection but no request sent to the server. You use this method if you want to defer sending update to the server until further action or if you want to update the collection with an already added item on the server in order to keep the collection sync.

If you want to send a POST request to the server and also add an item to the collection without refreshing the whole list, you should use the below code (same as in your question)

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


Framework Design Decision

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

Imagine if collection.post(item) and collection.push(item) adds item into collection and also sends a POST request to the server. What if the connection fails or the server error out? There is no way to report the error or to handle the error and the data added to collection is a bad stale data and out of sync with server. In order to avoid this kind of bug, the framework force the developers to add the item into collection only if the POST is successful.

You will find this programming model not only in Restangular but also in similar REST frameworks like 'ng-resource'. This programming model helps to reduce the bug and ensure that the item added to the collection is legitimate and not a bad stale data.



来源:https://stackoverflow.com/questions/20068363/restangular-inserting-models-to-collection-after-post

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!