My POST e PUT restituiscono lo stato corrente dell'entità sul server. Come posso comunicare a Restangular di aggiornare il suo oggetto modello dopo la chiamata al server?Come aggiornare l'oggetto del modello Restangular con la risposta del server?
Nel caso in cui - perché? Perché durante il salvataggio/aggiornamento il server potrebbe aver calcolato alcuni campi. Perché potrebbero esserci stati aggiornamenti concorrenti da parte di altri client e voglio essere sicuro che il client che sta aggiornando sia aggiornato.
Finora ho trovato solo questo:
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);
Sembra così sporco e comune allo stesso tempo, che ho il sospetto che ci deve essere un modo migliore.
EDIT
Il codice sopra illustrati solo due azioni distinte. Il mio obiettivo è non per inviare l'aggiornamento al server dopo aver creato l'entità, ma lo stato di aggiornamento sul client. Sincronizzazione dello stato con il server, se lo desideri.
quando posto un oggetto:
var res = {foo: "bar"};
Restangular.all("resource").post(res);
risposta Server ha un corpo con:
{"foo": "bar", "id": 15}
... poi vorrei Restangular aggiornare e restangularize dell'oggetto res
automaticamente, quindi ha l'ID, può essere put()
ecc.
Ora uno scenario diverso/complementare. Quando ho messo un oggetto Restangular:
var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();
Il server risponde sempre con lo stato corrente dell'oggetto, che può essere:
{"foo": "buzz", "id": 15}
... quindi vorrei Restangular per aggiornare automaticamente dopo res
questo PUT.
piacerebbe davvero vedere una risposta a questo. @ mgonto, c'è una ragione specifica per cui ciò non accade già? Forse le implementazioni REST predefinite non restituiscono dati dopo POST e PUT, solo un codice di stato? – jlb
Sì, non vi è alcuna garanzia che un servizio web RESTy restituisca l'oggetto in questione dopo che è stato creato, modificato, ecc. Il modulo comune per questo è semplicemente: $ scope.foo.put(). Then (function success (newFoo) {$ scope.foo = newFoo;}). –