いくつかの Ember オブジェクトを格納するために localStorage を使用する必要があります。Ember オブジェクトには のような名前のプロパティがあることに気付きました__ember1334992182483
。JSON.stringify()
Ember オブジェクトを呼び出すと、これらの__ember*
プロパティはシリアル化されません。どうしてこれなの?これらのプロパティをシリアライズしたいと言っているのではありません。それらが正確に何であり、それらがシリアル化されないようにどのように実装されているかについて、私はただ興味があります。
cycle.js ( https://github.com/douglascrockford/JSON-js/blob/master/cycle.js ) を使用して、重複参照を含むデータ構造を元のデータの再構築に使用できる文字列にエンコードしています構造。これを行うことができます:
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
Ember オブジェクトの場合も同じことができますが、逆シリアル化されたオブジェクトを に渡す必要もあります。これらのEmber.Object.create()
オブジェクトはプレーンな JavaScript オブジェクトとして逆シリアル化されるためです。
これは Ember オブジェクトをシリアライズ/デシリアライズする最良の方法ですか? これに推奨されるテクニックはありますか?