2

ビューモデルには、設計上、<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) 

これを回避する方法はありますか?

4

2 に答える 2

9

最終的には、エラー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は に変換されますが、すでにその値にアンラップされているオブザーバブルのプロパティであるため、消えてしまいますJSONparent

于 2012-11-03T02:01:56.173 に答える
0

Dojo への参照を追加することにオープンな場合 (デバッグのためだけの可能性があります)、dojox.json.ref.toJson は循環参照を使用して JSON オブジェクトをシリアル化できるようです。

この場合、次のことができます。

<pre data-bind="text: dojox.json.ref.toJson($data)"></pre>

また、おそらく dojo よりも軽量なソリューションを提供する可能性がある、チェックする価値のあるこのライブラリもあります: http://mixu.net/snapshot/

于 2012-11-02T23:24:33.703 に答える