视图模型有一个循环引用,通过设计,<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
inside的调用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
会消失,因为它是可观察对象上的一个属性,已经被解包为其值。
如果您愿意添加对 Dojo 的引用(可能只是为了调试),那么 dojox.json.ref.toJson 似乎能够使用循环引用序列化 JSON 对象。
在这种情况下,您可以这样做:
<pre data-bind="text: dojox.json.ref.toJson($data)"></pre>
还有一个值得检查的库,它可能提供比 dojo 更轻量级的解决方案:http: //mixu.net/snapshot/