2014-02-12 2 views
1

속성 및 모델이 포함 된 백본 컬렉션의 JSON으로의 직렬화가 얼마나 정확하게 수행되는지 알고 싶습니다.JSON에 직렬화 속성이 포함 된 백본 컬렉션

나는이 같은 모음이있는 경우 예를 당 그래서 :

var myCollection = Backbone.Collection.extend({ 

    initialize: function (attr, options) { 
     this.property = options.property; 
    } 
}); 
JSON.stringify (myCollection) 함수를 사용하여 캐릭터 라인 화하려고

의 캐릭터 라인 화는 백본 컬렉션 개체에 정의 된 객체 toJSON 메소드를 호출됩니다 . 다음과 같이 백본 컬렉션이 방법을 정의

toJSON : function() { 
    return this.map(function(model){ return model.toJSON(); }); 
} 

이 컬렉션에 포함 된 유일한 모델이 결과 JSON 객체에 포함됩니다하지만 컬렉션의 속성은 내가 이전에 정의되지 않은 것을 의미한다.

달성 할 수있는 사람이 누구인지 아십니까?

감사합니다.

편집 : 내 원래의 질문에 충분한 어쩌면 명확하지, 내가 내 질문에 정확히 내가이 특정 속성에 대한뿐만 아니라 (일반 문제에 필요한 달성하지만 상상하는 그것을 할 방법입니다 toJSON 메소드를 오버라이드 (override) 할 수 알고 다른 속성을 포함하는 다른 컬렉션이 있고 모두 기본 컬렉션 개체에서 상속받습니다. 그 이상의 JSON 개체를 백본 원래 상태로 복원하는 방법을 알고 싶습니다 (JSON을 전달하는 새 컬렉션을 만들면 확실하지 않음) 생성자의 매개 변수에있는 객체는이 속성을 사용하여 트릭을 수행합니다.

답변

0

MyCollection 클래스의 "toJSON"메소드를 재정의하고 원하는 문자열을 반환 할 수 있습니다.

0

@ trunal-bhanse와 같은 toJSON 메서드를 재정의 할 수 있지만 서버와 데이터를 동기화하는 것이 목표라면 데이터를 표현하는 더 좋은 방법을 찾아야합니다. 백본 컬렉션은 기본적으로 toJSON을 호출 할 때 배열을 반환합니다. 이 배열은 서버에 보내기 전에 JSON.stringify을 사용하여 문자열로 변환됩니다.

var test = ["foo", "bar", "baz"]; 
test.Hello = "World!"; 
console.log(test); // ["foo", "bar", "baz", Hello: "World!"] 
JSON.stringify(test); // '["foo", "bar", "baz"]' 
내가 서버에 저장하려면 그나마이 경우
+0

하지만, 로컬 스토리지에 임시 저장 : 그러나, JSON.stringify 방법을 사용하면 배열에 설정 한 모든 속성을 포함하지 않습니다. 당신이 설명한 것은 내가 드러낸 문제이며, 내가 원하는 것을 달성하기 위해 toJSON 메서드를 어떻게 오버라이드 (override)하는지 정확하게 모르겠습니다. –

+0

@JavierTarazaga가'localStorage'에 저장하면'JSON.parse' 메소드를 오버라이드 (override) 할 계획이 없으면 아무 것도하지 않을 것입니다. 콜렉션에서 'toJSON' 메소드를 덮어 쓰고 잘못된 JSON 문자열을'localStorage'에 저장 한 경우에도 나중에 * 검색하고 해당 문자열을 파싱하는 문제가 있습니다. – idbehold