gpt4 book ai didi

angularjs - Restangular - 嵌套资源

转载 作者:行者123 更新时间:2023-12-04 08:52:31 27 4
gpt4 key购买 nike

使用restangular处理嵌套资源时的最佳实践是什么?
IE。

Restangular.one("accounts", 1).one("projects", 1).get().then(function (project) {
project.getList("proofs").then(function(proofs){
project.proofs = proofs;
_.each(proofs, function(proof){
proof.comments = proof.getList("comments");
});
});
$scope.project = project;

});

这将允许我很好地访问 View 内部的每个。
<li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li>

如果我想对项目进行更新,它会将所有内容发送到项目的 REST 端点(包括所有证明和所有 proofs.comments)。
project.name = 'New Name!';
project.put();

这让我觉得我一定是在执行一些错误的事情,并且有更好的方法来处理它吗?

没有像这样(未经测试)将所有内容直接定义为单个 $scope ?
IE。
Restangular.one("accounts", 1).one("projects", 1).get().then(function (project) {
project.getList("proofs").then(function(proofs){
$scope.projectProofs = proofs;
_.each(proofs, function(proof){
$scope.proofComments[proof.id].push(proof.getList("comments"));
});
});
$scope.project = project;

});

建议的最佳做法是什么?

最佳答案

有两种选择:编写自定义 PUT 方法或从对象中删除属性

选项 #1:编写自定义 PUT 方法

放置元素的默认方法将提交所有设置的参数。

您可以在 Restangular 源代码中看到这一点,其中每个 Resource 都使用一组默认方法进行初始化,这些方法接受所有参数并且不进行任何过滤以删除参数。

您可以创建一个自定义方法,从对象中删除“证明”属性,或者仅选择某些字段以 PUT 到请求中。

选项 #2:从对象中删除属性。

在你之前put()你的项目,你可以做这样的事情:

/* ... code to get the project object and the nested proof objects ... */

project.name = 'New Name!';

delete project.proofs;
project.put();

delete 关键字将从对象中删除属性。那么当你调用 put()项目对象将不再包含嵌套资源。 You can read more about the delete keyword here.

您可以在控制台打印出该对象,以准确查看您向服务器提供的内容:
console.log(project);

关于angularjs - Restangular - 嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com