2012-11-02 4 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> 

을이 라이브러리는 아마도 도장보다 더 가벼운 솔루션을 제공 할 수있는 것을 확인 가치가있다 : 그것은 궁극적으로 내부 JSON.stringify에 대한 호출입니다 http://mixu.net/snapshot/

9

을 오류를 일으키는 ko.toJSON입니다.

JSON의 출력을 제어 할 수있는 방법 중 하나는 여기에 설명 된대로 toJSON 함수를 객체에 제공하는 것입니다 : http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html. 그렇게하면 적절한 위치에서 순환 참조를 제거 할 수 있습니다.

여기에도 사용할 수있는 몇 가지 기술이 있습니다.

  • ko.toJSON에 두 번째 인수를 전달할 수 있습니다. 여기에 설명 된대로 JSON.stringify에 대한 replacer 옵션이 있습니다.

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify. 당신은 당신이 "하위"-observable로 JSON로 바뀌 얻을하지 않으려는 속성을 첨부 할 수 있습니다

    ko.toJSON(myobject, ["one", "two", "three"]) 
    
  • 같은 :

    는 예를 들어, 같은 포함하는 속성의 배열을 전달할 수 있습니다 : 그것이 오의 속성이기 때문에,이 경우

this.data = ko.observable(); 
this.data.parent = parent; 
dataJSON로 바뀌 얻을 것이다, 그러나 parent은 사라집니다 이미 그것의 가치로 풀리지 않는 bservable.