2012-11-02 69 views
2

視圖模型有一個循環引用,通過設計,使得使用<pre data-bind="text: ko.toJSON($data)"></pre>調試扔循環引用:knockoutjs - 調試與視圖模型

Unable to parse bindings. 
Message: TypeError: Converting circular structure to JSON; 
Bindings value: text: ko.toJSON($data) 

是否有辦法來解決此問題?

回答

0

如果您打算添加對Dojo的引用(可能僅用於調試),那麼dojox.json.ref.toJson似乎能夠使用循環引用序列化JSON對象。

在這種情況下,你可以這樣做:

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

也有這個庫值得一檢查或許可以提供比道場更輕量級的解決方案:http://mixu.net/snapshot/

9

這是最終調用JSON.stringifyko.toJSON導致你的錯誤。

您可以控制JSON輸出的一種方法是在對象上提供toJSON函數,如下所述:http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html。這樣你就可以在適當的地方去掉循環引用。

還有一些其他技術可以用於此目的。

  • 您可以將第二個參數傳遞給ko.toJSON。這是JSON.stringifyreplacer選項,如下所述:

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

    例如,您可以通過屬性數組,包括像:

    ko.toJSON(myobject, ["one", "two", "three"]) 
    
  • 你可以附上你不想得到變成JSON作爲一個「子」 -observable屬性像:

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

在這種情況下,data將得到變成JSON,但parent只會消失,因爲它是一個O屬性bservable已經解開了它的價值。