2011-08-12 7 views
0

モデルにモデルを入れ子にする大きなjsonサーバー応答があります。私はサーバーを休止状態にする方法がありません。 jsonツリーをコレクション内のコレクションとコレクションに解析する必要があります。私はその後、同じjson構造のバックボーンモデルを変更後にサーバーにエクスポートしたいと考えています。 http://documentcloud.github.com/backbone/#FAQ-nested大きなjsonデータのモデル内外への解析

JSONレスポンスのトップレベルiが通過することができたので、セクションの配列である:

私はセクションと呼ばれるコレクション、および入れ子に各セクションモデル内の質問の集合を、この方法を使用して持っていますそれをsectionコレクションに直接渡して、私は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()メソッドをオーバーライドすることですあなたが変更されるネストされたコレクションがたくさんある場合、より抽象的な方法がいいでしょう。

私はそれは常にすべてのnestedCollectionsを解析し、それを返す前にJSONオブジェクトに追加されますように、すべてのネストされたモデルの特殊なプロパティにコレクション(nestedCollections言う)と、その後Backbone.Model.prototype.toJSONにパッチを適用猿を格納する例について考えることができます。

入れ子モデルの代わりにを使用することもできます(これは自動的にtoSSONを処理するため、考慮する必要はありません)。