首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩形嵌套资源

矩形嵌套资源
EN

Stack Overflow用户
提问于 2013-11-12 00:01:33
回答 2查看 1.4K关注 0票数 8

在使用restangular处理嵌套资源时,最佳实践是什么?即

代码语言:javascript
复制
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;

});

这将允许我很好地访问视图中的每一个。

代码语言:javascript
复制
<li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li>

如果我想要对项目进行更新,它会将所有内容发送到项目的REST端点(包括所有的校样和所有的proofs.comments)。

代码语言:javascript
复制
project.name = 'New Name!';
project.put();

这让我认为我一定是在实现错误的东西,并且应该有更好的方法来处理它?

没有像这样(未测试)将所有内容直接定义到单独的$scope中?即

代码语言:javascript
复制
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;

});

对此建议的最佳实践是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-07-31 10:05:03

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

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

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

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

您可以创建一个自定义方法,该方法从对象中剥离“proofs”属性,或者只选择某些字段放入请求中。

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

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

代码语言:javascript
复制
/* ... 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.

您可以在控制台打印出对象,以准确地查看您要放到服务器上的内容:

代码语言:javascript
复制
console.log(project);
票数 1
EN

Stack Overflow用户

发布于 2015-04-22 22:23:26

如果只修改一个字段,可以使用带参数的element.patch,如下所示:

代码语言:javascript
复制
// get project...

update = function(field, value){
  project.patch({ field, value });
}

此外,大多数情况下,字段的值是通过<input ng-model="project.FIELD_NAME"/>更改的,因此您可以重用它:

在您的控制器中:

代码语言:javascript
复制
// get project...

$scope.update = function(field){
  payload = {};
  payload[field] = $scope.project[field];
  project.patch(payload);
}

在您的模板中

代码语言:javascript
复制
<!-- Use submit button or ng-blur... -->
<input ng-model="project.FIELD_NAME" /> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19910667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档