Javascript 如何使用服务器响应更新重新启动的模型对象?

Javascript 如何使用服务器响应更新重新启动的模型对象?,javascript,rest,angularjs,restangular,Javascript,Rest,Angularjs,Restangular,我的POST和PUT返回服务器上看到的实体的当前状态。在服务器调用后,如何让Restanglar更新其模型对象 以防万一——为什么?因为在保存/更新期间,服务器可能已经计算了一些字段。因为其他客户端可能同时进行了更新,我希望确保当前正在更新的客户端是最新的 到目前为止,我只发现: var res = {foo: "bar"}; var cb = function(response) { $.extend(res, response); } // POST / create Restang

我的POST和PUT返回服务器上看到的实体的当前状态。在服务器调用后,如何让Restanglar更新其模型对象

以防万一——为什么?因为在保存/更新期间,服务器可能已经计算了一些字段。因为其他客户端可能同时进行了更新,我希望确保当前正在更新的客户端是最新的

到目前为止,我只发现:

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}
。。。然后我希望restanglar自动更新并重新设置
res
对象的角度,这样它就有了ID,可以是
put()
等等

现在是一个不同/互补的场景。当我放置Restanglar对象时:

var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();
服务器始终使用对象的当前状态进行响应,可能是:

{"foo": "buzz", "id": 15}

。。。因此,我希望Restangular在此放置后自动更新
res

我是Restangular的创建者

如果我没弄错的话,你想先做post,然后再做put?在这种情况下,您可以执行以下操作:

var res = {foo: 'bar'};
Restangular.all('resource').post(rest).then(function(response) {
    res = response;
   res.put()
})
我不知道我是否理解正确

希望它能起作用

试试这个:

res.put().then(function(data) {
    angular.extend(res, data);
});

谢谢你的回复,这不是我的问题。它们是两个独立的行动。我将更详细地编辑这个问题。我认为他想要的是任何服务器端更改(如更新时间戳或“修改对象”类型)自动或轻松地更新客户机对象,而无需从
.then()
执行。您不能直接设置它,因为您将丢失任何额外的模型信息,并且必须使用类似于
$.extend()
的东西。嘿,编辑后,您可以在Restanglar 1.2.0$对象上执行u.extend或使用新功能。res=res.put().$object;这对我帮助很大。我真的很想看到对此的回应@MGONO,有没有一个具体的原因导致这种情况没有发生?也许默认的REST实现不会在POST和PUTs之后返回数据,而只返回状态代码?是的,RESTy web服务不能保证在创建、更改等对象之后返回相关对象。常见的形式是:$scope.foo.put().then(function success(newFoo){$scope.foo=newFoo;})。