在使用restangular处理嵌套资源时,最佳实践是什么?即
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;});
这将允许我很好地访问视图中的每一个。
<li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li>如果我想要对项目进行更新,它会将所有内容发送到项目的REST端点(包括所有的校样和所有的proofs.comments)。
project.name = 'New Name!';
project.put();这让我认为我一定是在实现错误的东西,并且应该有更好的方法来处理它?
没有像这样(未测试)将所有内容直接定义到单独的$scope中?即
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;});
对此建议的最佳实践是什么?
发布于 2014-07-31 10:05:03
有两种选择:编写自定义PUT方法或从对象中删除属性
选项#1:编写自定义PUT方法
放置元素的默认方法将提交所有设置的参数。
您可以在Restangular源代码中看到这一点,其中每个资源都是使用默认的一组方法初始化的,这些方法接受所有参数,并且不进行任何过滤来删除参数。
您可以创建一个自定义方法,该方法从对象中剥离“proofs”属性,或者只选择某些字段放入请求中。
选项#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);发布于 2015-04-22 22:23:26
如果只修改一个字段,可以使用带参数的element.patch,如下所示:
// get project...
update = function(field, value){
project.patch({ field, value });
}此外,大多数情况下,字段的值是通过<input ng-model="project.FIELD_NAME"/>更改的,因此您可以重用它:
在您的控制器中:
// get project...
$scope.update = function(field){
payload = {};
payload[field] = $scope.project[field];
project.patch(payload);
}在您的模板中
<!-- Use submit button or ng-blur... -->
<input ng-model="project.FIELD_NAME" /> https://stackoverflow.com/questions/19910667
复制相似问题