2013-08-01 41 views
10

我的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。

+2

真的想看到這樣的反應。 @mgonto,有沒有一個特定的原因,爲什麼這不會發生?也許默認的REST實現在POST和PUT之後不返回數據,只有狀態碼? – jlb

+1

是的,不能保證RESTy web服務在創建,更改等後會返回有問題的對象。常見的形式是:$ scope.foo.put()。then(function success( newFoo){$ scope.foo = newFoo;})。 –

回答

4

我是Restangular的創造者。

如果我正確理解你的話,你想先做好這篇文章,然後做一下呢?在這種情況下,你可以這樣做:

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

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

希望工程

+0

謝謝你的迴應,這不是我的問題。他們是兩個單獨的行動。我會更詳細地編輯問題。 –

+1

我認爲他想要的是任何服務器端更改(如更新時間戳或「修改對象類型的修改」)以自動或輕鬆地更新客戶端對象,而不必從'.then() '。你不能直接設置它,因爲你會失去任何額外的模型信息,並且必須使用像'$ .extend()' – John

+4

嘿,編輯後,你可以做_.extend或使用Restangular 1.2上的新功能。 0 $對象。 res = res.put()。$ object; – mgonto

0

試試這個:

res.put().then(function(data) { 
    angular.extend(res, data); 
}); 
相關問題