发布后将模型插入到集合中

2024-01-30

我正在将一个模型插入带有帖子的矩形集合中

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

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


首先,这两种方法的行为不同:

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) and collection.push(item)将项目添加到集合中,并向服务器发送 POST 请求。如果连接失败或者服务器出错怎么办?无法报告错误或处理错误,并且添加到集合中的数据是坏的陈旧数据并且与服务器不同步。为了避免这种错误,框架强制开发人员仅在 POST 成功时才将项目添加到集合中。

您不仅会在 Restangular 中找到这种编程模型,而且还会在“ng-resource”等类似的 REST 框架中找到这种编程模型。这种编程模型有助于减少错误并确保添加到集合中的项目是合法的,而不是坏的陈旧数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发布后将模型插入到集合中 的相关文章

随机推荐