2011-08-12 2 views
0

모델에 모델을 중첩하는 큰 json 서버 응답이 있습니다. 서버를 기반으로 휴식을 취할 방법이 없습니다. json 트리를 컬렉션 내의 컬렉션과 컬렉션으로 파싱해야합니다. 그런 다음 동일한 json 구조의 백본 모델을 수정 한 후 서버로 내보내고 싶습니다. http://documentcloud.github.com/backbone/#FAQ-nested큰 json 데이터를 모델 내부 및 외부에서 파싱

JSON 응답의 최상위 i가 통과 할 수 있었다 있도록 섹션들의 어레이이다

나는 부분이라고 수집 및 둥지 각과 모델 내 질문 컬렉션이 방법을 사용하여이 그 섹션 컬렉션에 직접, 나는 그때 자식 질문을 구문 분석하고 속성에서 그들을 삭제 initialize 메서드를 사용했습니다. 그러나 이것은 모델 컬렉션에있는 모든 toJSON에서 반환 된 model.questions를 얻지 못한다는 것을 의미합니다.

SCC.Models.Section = Backbone.Model.extend({ 
    initialize: function() { 
     var questions = this.get('questions'); 
     this.questions = new SCC.Collections.Questions(questions); 
     delete this.attributes.questions; 

    } 
}); 

SCC.Collections.Sections = Backbone.Collection.extend({ 
    model: SCC.Models.Section 
}); 

SCC.Sections = new SCC.Collections.Sections(); 
//imagine window.SectionData is the server response 
SCC.Sections.reset(window.SectionData); 

잘하면 나는 분명히. 더 많은 정보가 필요하면 알려줘.

감사합니다. 그러나

SCC.Models.Section = Backbone.Model.extend({ 
    initialize: function() { 
     var questions = this.get('questions'); 
     this.questions = new SCC.Collections.Questions(questions); 
     delete this.attributes.questions; 
    }, 
    toJSON: function() { 
     var json = Backbone.Model.prototype.toJSON.call(this); 
     json.questions = this.questions.toJSON() 
     return json 
    } 
}); 

: 당신 통제하에 자주 변경 될 수 없습니다 중첩 된 모델의 제한된 번호가있는 경우

답변

1

는 쉬운 방법은 컬렉션을 중첩 한 당신의 모델 toJSON() 메소드를 오버라이드 (override)하는 것입니다 , 변경 될 수있는 중첩 된 컬렉션이 많은 경우보다 추상적 인 방식으로 멋지게 될 것입니다.

내가 모델의 특별한 프로퍼티의 모든 중첩 된 컬렉션을 저장 예를 들어 생각할 수 (nestedCollections를 말) 다음 원숭이는 항상 모든 nestedCollections를 분석하고 그것을 반환하기 전에 JSON 개체에 추가합니다 그래서 Backbone.Model.prototype.toJSON 패치.

또 다른 방법은 중첩 모델 대신 Backbone relational을 사용하는 것입니다 (자동으로 toSSON을 처리하므로 생각할 필요가 없습니다).

관련 문제