ZastosowanieJavaScript, nadpisywanie obiektu bez utraty Reference
Pracuję na prostej aplikacji internetowej, który jest zbudowany na szczycie angularjs. Aplikacja powinna działać zarówno w trybie offline, jak i online. Gdy użytkownik jest w trybie offline, zmiany danych są przechowywane lokalnie. W związku z tym, identyfikator użytkownika, który jest używany w tej aplikacji w trybie offline jest tylko tymczasowy identyfikator użytkownika, dostają wymienić, gdy przesłane do serwera
Problem
Dane, które są wykorzystywane w aplikacji składa się z obiektów złożonych (z powiązaniami/odniesieniami do innych obiektów). Kiedy zapisuję na serwerze, chciałem, aby widoki były aktualizowane za pomocą nowych "prawdziwych" identyfikatorów. Jednak ponieważ JavaScript działa z obiektami jako odniesieniami, nie jestem w stanie zrobić tego, co chcę: $scope.data = newdata
To nie zastępuje $ scope.data, ale tworzy nowy obiekt. Stare odniesienie do starych danych nadal istnieje.
przykład uproszczony
var x = {id: 1, name: "myObject"}
var c = x // c = {id: 1, name: "myObject"}
x = {id: 2, name: "myNewObject"}
// c = {id: 1, name: "myObject"}
Jak widać, c jest wciąż nawiązanie do starego obiektu. W praktyce powoduje to, że mój widok nie jest aktualizowany o nowe dane, ponieważ nadal jest powiązany ze starymi danymi. To, czego potrzebuję, to nadpisanie właściwości w tym przykładzie x. Muszę to zrobić rekurencyjnie, ponieważ moje prawdziwe obiekty są złożone, jednak nie powinny zawierać żadnych odwołań kołowych, ponieważ prawdopodobnie spowoduje to przepełnienie stosu. Jeśli nadpisuję wartość b, a ma właściwości, których nie ma, to te właściwości powinny zostać usunięte.
Co muszę
muszę jakąś funkcję, która nadpisuje wszystkie właściwości w (stary) z przedmiotu własności w b (nowy obiekt). Wszystkie właściwości istniejące w a, ale nie w b, powinny zostać usunięte.
To dość odlotowy. Uderza ręcznie, wypisując wszystkie właściwości. – tylerjgarland