我的POST和PUT返回服务器上显示的当前实体状态。如何在服务器调用后告诉Restangular更新其模型对象?
以防万一 - 为什么?因为在保存/更新期间,服务器可能已经计算了一些字段。因为其他客户端可能同时进行了更新,我想确保当前正在更新的客户端是最新的。
到目前为止,我只发现了这个:
var res = {foo: "bar"};
var cb = function(response) {
$.extend(res, response);
}
// POST / create
Restangular.all("resource").post(res).then(cb);
// PUT / update
res.put().then(cb);
在我怀疑必须有更好的方法的同时,它看起来如此肮脏和普遍。
修改
上面的代码仅演示了两个不同的操作。我的目标是不在创建实体后向服务器发送更新,但在客户端更新状态。如果愿意,可以将状态与服务器同步。
当我发布一个对象时:
var res = {foo: "bar"};
Restangular.all("resource").post(res);
服务器响应的正文为:
{"foo": "bar", "id": 15}
...然后我希望Restangular自动更新和重新组合res
对象,因此它有ID,可以是put()
等。
现在是一个不同/互补的场景。当我PUT一个Restangular对象时:
var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();
服务器始终回复对象的当前状态,可能是:
{"foo": "buzz", "id": 15}
...所以我希望Restangular在此PUT之后自动更新res
。
答案 0 :(得分:4)
我是Restangular的创造者。
如果我理解正确,你想先发帖子,然后做点什么?在这种情况下,您可以执行以下操作:
var res = {foo: 'bar'};
Restangular.all('resource').post(rest).then(function(response) {
res = response;
res.put()
})
我不知道我是否理解正确。
希望它有效
答案 1 :(得分:0)
试试这个:
res.put().then(function(data) {
angular.extend(res, data);
});