10

私の 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);

それは非常に汚いと同時に一般的であるように思われるので、もっと良い方法があるに違いないと思います。

編集

上記のコードは、2 つの異なるアクションのみを示しています。私の目標は、エンティティの作成後にサーバーに更新を送信することではなく、クライアントの状態を更新することです。必要に応じて、状態をサーバーと同期しています。

オブジェクトを POST すると:

var res = {foo: "bar"};
Restangular.all("resource").post(res);

サーバー応答の本文は次のとおりです。

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

...次に、Restangular にresオブジェクトを自動的に更新および再構築してもらいたいので、IDを取得したり、put()などを行うことができます。

今、別の/補完的なシナリオ。Restangular オブジェクトを PUT すると:

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

サーバーは常にオブジェクトの現在の状態を返します。

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

res...だから、この PUT の後、Restangular を自動的に更新したいと思います。

4

2 に答える 2

4

私は Restangular の作成者です。

私の理解が正しければ、最初にポストを行い、次にプットを行いますか? その場合、次のようなことができます。

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

正しく理解できたかどうかわかりません。

それがうまくいくことを願っています

于 2013-08-01T21:34:19.180 に答える