根据文档,Restangular
方法save()
根据需要执行POST
或PUT
。但是,文档还说save()
仅适用于元素,那么如何为正在创建的新元素调用save()
?
我的代码目前执行两种不同的Restangular调用,具体取决于我是创建还是更新:
对于创建,它是Restangular.all('foo').post($scope.fooData)
更新它是
Restangular.one('foo', id).get().then(function (response) {
$scope.fooData = response;
});
...
$scope.fooData.save()
我错过了什么吗?我认为Restangular要求你为这两种情况调用save
,但我不知道在一种情况下我需要POST
到一个集合(新元素)和另一个PUT
在现有元素上。
答案 0 :(得分:1)
关于Restangular.one("building", 5).post('users', user).then(function(postedUser) {
console.log("Success");
})
,它的创建者曾说过一次( link ):
应该对集合进行帖子,而不是对元素进行。所以,如果你想 要将用户添加到建筑物中,您应该执行以下操作:
save()
现在one
方法用于决定是否使用PUT或POST请求。但根据其this github issue中的创建者,只有在var user = Restangular.one('users');
user.name = 'gonto';
user.save() // Does POST
内创建您的收藏时才会有效:
post()
这就是使它与使用save()
不同的原因。 Restangular.service()
不适用于非restangularized对象,无法在one()
创建的服务上调用。
如果您使用save()
从您的收藏集中检索某个实例,那么您可以让put
决定该元素何时创建或更新< / em>的。如果没有,那么您必须自己实施patch
,post
或Restangular.all('foo').post($scope.fooData)
。所以你的代码可以这样工作:
save()
但如果在Restangular.all()
函数内调用empty
,则根本不会。
作为一个不同的例子,在使用嵌套模型时。我通常在名为app.service('Foo', ['Restangular', function(Restangular) {
...
return{
...
empty: (function() {
return Restangular.service('foos');
}),
};
}
的实例中返回集合,以避免混淆:
$scope.foo= Foo.empty();
$scope.addFoo=function($foo){
$scope.foo.post($foo).then(function(data) {
...
});
}
然后我就是在控制器中创建新元素的方法:
save()
使用我的API路由结构,它可以正常工作而不使用save()
函数。
python setup.py install
方法添加到 Restangular 之前的参数已启动here。