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.stringifyinside的调用ko.toJSON导致您的错误。

控制 JSON 输出的一种方法是toJSON在对象上提供一个函数,如下所述:http ://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html . 这样您就可以在适当的位置删除循环引用。

您还可以使用其他一些技术来实现这一点。

  • 您可以将第二个参数传递给ko.toJSON. 这是此处描述的replacer选项:JSON.stringify

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify

    例如,您可以传递一组属性以包括:

    ko.toJSON(myobject, ["one", "two", "three"])
    
  • 您可以将不想转换为 JSON 的属性附加为“sub”-observable,例如:

    this.data = ko.observable();
    this.data.parent = parent;
    

在这种情况下,data将变成JSON,但parent会消失,因为它是可观察对象上的一个属性,已经被解包为其值。

于 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 回答