knockoutjs - 在视图模型中使用循环引用进行调试

时间:2012-11-02 23:17:09

标签: knockout.js

视图模型有一个循环引用,按设计,使用<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) 

有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:9)

JSON.stringifyko.toJSON的调用最终导致您的错误。

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

您也可以使用其他一些技术。

在这种情况下,this.data = ko.observable(); this.data.parent = parent; 将变为data,但JSON将会消失,因为它是已被解包为其值的observable的属性。

答案 1 :(得分:0)

如果您打开添加对Dojo的引用(可能仅用于调试),则dojox.json.ref.toJson似乎能够使用循环引用序列化JSON对象。

在这种情况下,你可以这样做:

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

还有一个值得检查的库可能提供比dojo更轻量级的解决方案:http://mixu.net/snapshot/