Potrzebuję użyć localStorage do przechowywania niektórych obiektów Ember. Zauważam, że obiekty Ember mają właściwości o nazwach takich jak __ember1334992182483
. Kiedy wywołuję JSON.stringify()
na obiektach Ember, te właściwości __ember*
nie są serializowane. Dlaczego to? Nie mówię, że chcę serializować te właściwości. Jestem tylko ciekawy, czym dokładnie są i jak są one realizowane tak, że nie są serializowane.Jak serializować obiekty Ember?
Używam cycle.js (https://github.com/douglascrockford/JSON-js/blob/master/cycle.js) do kodowania struktur danych, które zawierają zduplikowane odwołania do ciągu, który może być użyty do rekonstrukcji oryginalnych struktur danych. Pozwala to zrobić:
a = {a:1}
b = {b:1}
c = [[a, b], [b, a]]
foo = JSON.stringify(JSON.decycle(c)) // "[[{'a':1},{'b':1}],[{'$ref':'$[0][1]'},{'$ref':'$[0][0]'}]]"
JSON.retrocycle(JSON.parse(foo)) // reconstruct c
Dla obiektów Ember mogę zrobić to samo, ale muszą także zdać deserialised przedmiotów do Ember.Object.create()
ponieważ są deserialised jako zwykły obiektów JavaScript.
Czy to najlepszy sposób na serializację/deserializację obiektów Ember? Czy istnieje zalecana technika?
Dlaczego są '__ember *' właściwości nie na wyjściu 'JSON.stringify()'? – hekevintran
Muszę zgadywać tutaj, ponieważ nie jestem ekspertem od JavaScript: ale jeśli zrobisz 'for (prop w obj) {}' na 'Ember.Object', to nie ma' __ember * 'i sprawdź dla'. obj.hasOwnProperty' zwraca tylko wartość true dla zdefiniowanych właściwości, zobacz http://jsfiddle.net/pangratz666/w53DH/. – pangratz
Właściwości '__ember *' nie są wymienione w pętli 'for ... in'. Wykonanie 'App.obj.hasOwnProperty ('__ ember1335029966963')' zwraca 'true'. – hekevintran