我的POST和PUT返回服務器上看到的實體的當前狀態。如何告訴Restangular在服務器調用後更新其模型對象?如何使用服務器響應更新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);
它似乎很骯髒,並在此我懷疑必須有一個更好的辦法,同時常用的。
EDIT
上述代碼僅演示兩個不同的動作。我的目標是而不是在創建實體後將更新發送到服務器,但更新客戶端上的狀態。如果您願意,可以與服務器同步狀態。
當我發佈一個對象:
var res = {foo: "bar"};
Restangular.all("resource").post(res);
服務器響應具有體:
{"foo": "bar", "id": 15}
...然後我想Restangular更新和自動restangularize的res
對象,因此它具有該ID可以是put()
等。
現在是不同的/補充的情況。當我把一個Restangular對象:
var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();
服務器始終與對象的當前狀態,這可能是回覆:
{"foo": "buzz", "id": 15}
...所以我想以後自動Restangular更新res
這個PUT。
真的想看到這樣的反應。 @mgonto,有沒有一個特定的原因,爲什麼這不會發生?也許默認的REST實現在POST和PUT之後不返回數據,只有狀態碼? – jlb
是的,不能保證RESTy web服務在創建,更改等後會返回有問題的對象。常見的形式是:$ scope.foo.put()。then(function success( newFoo){$ scope.foo = newFoo;})。 –