Как обновить объект модели Vertangular с ответом сервера?

Мои 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 обновлял и restangularize объект res автоматически, поэтому он имеет идентификатор, может быть put() и т.д.

Теперь другой сценарий. Когда я устанавливаю объект Restangular:

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

Сервер всегда отвечает текущим состоянием объекта, который может быть:

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

... поэтому я хочу, чтобы Restangular автоматически обновлял res после этого PUT.

Ответ 1

Я создатель Restangular.

Если я правильно вас понимаю, вы хотите сначала сделать сообщение, а затем сделать ставку? В этом случае вы можете сделать что-то вроде:

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

Я не знаю, правильно ли я понял.

Надеюсь, что это работает.

Ответ 2

Попробуйте следующее:

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