ビューモデルには、設計上、<pre data-bind="text: ko.toJSON($data)"></pre>
スローするデバッグに使用する循環参照があります。
Unable to parse bindings.
Message: TypeError: Converting circular structure to JSON;
Bindings value: text: ko.toJSON($data)
これを回避する方法はありますか?
ビューモデルには、設計上、<pre data-bind="text: ko.toJSON($data)"></pre>
スローするデバッグに使用する循環参照があります。
Unable to parse bindings.
Message: TypeError: Converting circular structure to JSON;
Bindings value: text: ko.toJSON($data)
これを回避する方法はありますか?
最終的には、エラーJSON.stringify
の原因となる内部への呼び出しです。ko.toJSON
JSON の出力を制御する方法の 1 つは、toJSON
ここで説明されているように、オブジェクトに関数を提供することです: http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html . そうすれば、適切な場所で循環参照を削除できます。
これに使用できるテクニックが他にもいくつかあります。
に 2 番目の引数を渡すことができますko.toJSON
。これは、ここで説明するreplacer
オプションです。JSON.stringify
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify .
たとえば、次のようなプロパティの配列を渡すことができます。
ko.toJSON(myobject, ["one", "two", "three"])
次のように、JSON に変換したくないプロパティを「サブ」オブザーバブルとしてアタッチできます。
this.data = ko.observable();
this.data.parent = parent;
この場合、data
は に変換されますが、すでにその値にアンラップされているオブザーバブルのプロパティであるため、消えてしまいますJSON
。parent
Dojo への参照を追加することにオープンな場合 (デバッグのためだけの可能性があります)、dojox.json.ref.toJson は循環参照を使用して JSON オブジェクトをシリアル化できるようです。
この場合、次のことができます。
<pre data-bind="text: dojox.json.ref.toJson($data)"></pre>
また、おそらく dojo よりも軽量なソリューションを提供する可能性がある、チェックする価値のあるこのライブラリもあります: http://mixu.net/snapshot/