Moje POST i PUT zwracają bieżący stan encji jak widać na serwerze. Jak mogę powiedzieć Restangular, aby zaktualizować obiekt modelu po wywołaniu serwera?Jak zaktualizować obiekt modelu restarta z odpowiedzią serwera?
Na wszelki wypadek - dlaczego? Ponieważ podczas składowania/aktualizacji serwer mógł obliczyć kilka pól. Ponieważ mogły istnieć współbieżne aktualizacje przez innych klientów i chcę mieć pewność, że klient, który jest obecnie aktualizowany, jest aktualny.
Jak dotąd znalazłem tylko to:
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);
Wydaje się więc brudne i powszechne w tym samym czasie, że podejrzewam, że musi być lepszy sposób.
EDIT
Powyższy kod pokazuje tylko dwie odrębne czynności. Moim celem jest , a nie wysyłanie aktualizacji do serwera po utworzeniu encji, ale aktualizacja stanu na kliencie. Synchronizacja stanu z serwerem, jeśli chcesz.
Kiedy POST obiektu:
var res = {foo: "bar"};
Restangular.all("resource").post(res);
Odpowiedź serwera ma ciało:
{"foo": "bar", "id": 15}
... to chciałbym Restangular zaktualizować i restangularize obiekt res
automatycznie, a więc ma identyfikator może być put()
itp.
Teraz inny/uzupełniający scenariusz. Kiedy kładę Restangular obiektu:
var res = Restangular.one("resource", 15).get();
// returns {foo: "bar", id: 15}
res.put();
Serwer zawsze odpowiada aktualnym stanem obiektu, który może być:
{"foo": "buzz", "id": 15}
... więc chciałbym Restangular zaktualizować res
automatycznie po to PUT.
naprawdę chciałbym zobaczyć odpowiedzi do tego. @mgonto, czy istnieje szczególny powód, dla którego tak się już nie stało? Może domyślne wdrożenia REST nie zwracają danych po testach POST i PUT, a jedynie kod statusu? – jlb
Tak, nie ma gwarancji, że usługa internetowa RESTy zwróci obiekt, o którym mowa, po jego utworzeniu, zmianie itp. Powszechną formą jest po prostu: $ scope.foo.put(). Then (funkcja success (newFoo) {$ scope.foo = newFoo;}). –