Necesito usar localStorage para almacenar algunos objetos Ember. Noté que los objetos Ember tienen propiedades con nombres como __ember1334992182483
. Cuando llamo al JSON.stringify()
en objetos Ember, estas propiedades __ember*
no se serializan. ¿Por qué es esto? No digo que quiera serializar esas propiedades. Solo tengo curiosidad sobre qué son exactamente y cómo se implementan de manera que no se serialicen.¿Cómo se serializan los objetos Ember?
Estoy utilizando cycle.js (https://github.com/douglascrockford/JSON-js/blob/master/cycle.js) para codificar mis estructuras de datos que contienen referencias duplicadas en una cadena que se puede utilizar para reconstruir las estructuras de datos originales. Se le permite hacer esto:
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
Para objetos Ember puedo hacer lo mismo, pero también necesita pasar los objetos deserialised en Ember.Object.create()
porque están deserialised como objetos JavaScript lisos.
¿Es esta la mejor manera de serializar/deserializar objetos Ember? ¿Hay una técnica recomendada para esto?
¿Por qué el '__ember *' propiedades que no están en la salida de 'JSON.stringify()'? – hekevintran
Tengo que adivinar aquí ya que no soy un experto en JavaScript: pero si haces un 'for (prop in obj) {}' en un 'Ember.Object', no se incluye' __ember * 'y se verifica' obj.hasOwnProperty' solo devuelve verdadero para las propiedades definidas, ver http://jsfiddle.net/pangratz666/w53DH/. – pangratz
Las propiedades '__ember *' no aparecen en el bucle 'for ... in'. Al hacer 'App.obj.hasOwnProperty ('__ ember1335029966963')' se devuelve 'true'. – hekevintran