【问题标题】:How to update Restangular model object with server response?如何使用服务器响应更新 Restangular 模型对象?
【发布时间】:2013-08-01 07:07:48
【问题描述】:

我的 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()等。

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

var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();

服务器总是回复对象的当前状态,可能是:

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

...所以我希望 Restangular 在此 PUT 之后自动更新 res

【问题讨论】:

  • 真的很想看到对此的回应。 @mgonto,是否有特定的原因导致这种情况还没有发生?也许默认的 REST 实现在 POST 和 PUT 之后不返回数据,只有状态码?
  • 是的,不能保证 RESTy Web 服务在创建、更改等之后会返回有问题的对象。常见的形式很简单:$scope.foo.put( ).then(函数成功(newFoo) { $scope.foo = newFoo; }).

标签: javascript rest angularjs restangular


【解决方案1】:

我是 Restangular 的创造者。

如果我理解正确,你想先做post,然后做put?在这种情况下,您可以执行以下操作:

var res = {foo: 'bar'};
Restangular.all('resource').post(rest).then(function(response) {
    res = response;
   res.put()
})

我不知道我是否理解正确。

希望有效果

【讨论】:

  • 感谢您的回复,但这不是我的问题。它们是两个独立的动作。我将更详细地编辑问题。
  • 我认为他想要的是任何服务器端更改(例如更新时间戳或对对象的“修改”类型的修改)自动或轻松地更新客户端对象而无需这样做来自.then()。你不能直接设置它,因为你会丢失任何额外的模型信息并且必须使用类似$.extend()
  • 嘿,编辑后你可以做 _.extend 或使用 Restangular 1.2.0 $object 上的新功能。 res = res.put().$object;
  • 这对我帮助很大。
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多