5

我正在使用 post 将模型插入到 restangular 集合中

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);
});

为什么插入的模型默认不插入到集合中?是否有一个原因?我错过了一个电话还是什么?插入模型后,我想避免再次获取集合

4

1 回答 1

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”)中找到这种编程模型。这种编程模型有助于减少错误并确保添加到集合中的项目是合法的,而不是糟糕的陈旧数据。

于 2016-06-18T15:23:01.000 回答