And*_*ell 8 rest angularjs restangular
使用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;
Run Code Online (Sandbox Code Playgroud)
});
这将允许我很好地访问视图内的每个.
<li ng-repeat="proof in project.proofs">Total: {{proof.comments.length}}</li>
Run Code Online (Sandbox Code Playgroud)
如果我想要对项目进行更新,那么它会将所有内容发送到项目REST端点(包括所有校样和所有proofs.comments).
project.name = 'New Name!';
project.put();
Run Code Online (Sandbox Code Playgroud)
这让我觉得我必须实施一些错误的东西,并且冥想是一种更好的处理方法吗?
没有用这样的东西直接定义所有的$ 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;
Run Code Online (Sandbox Code Playgroud)
});
建议的最佳做法是什么?
小智 1
有两种选择:编写自定义 PUT 方法或从对象中删除属性
放置元素的默认方法将提交所有设置的参数。
您可以在 Restangular 源代码中看到这一点,其中每个资源都使用一组默认方法进行初始化,这些方法接受所有参数,并且不执行任何过滤来删除参数。
您可以创建一个自定义方法,从对象中删除“proofs”属性,或者仅选择某些字段以放入请求中。
在你的项目之前put(),你可以做这样的事情:
/* ... code to get the project object and the nested proof objects ... */
project.name = 'New Name!';
delete project.proofs;
project.put();
Run Code Online (Sandbox Code Playgroud)
delete 关键字将从对象中删除该属性。然后,当您调用put()项目对象时,其中将不再包含嵌套资源。您可以在此处阅读有关删除关键字的更多信息。
您可以在控制台打印出该对象,以准确查看要放入服务器的内容:
console.log(project);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |