2013-01-16 38 views
5

मैं बस Backbone से शुरू कर रहा हूं और मैं एक समस्या में भाग रहा हूं। मेरे पास एक अच्छा विश्राम सेटअप है। मेरे अधिकांश GET अनुरोध के लिए मुझे मॉडल का एक संग्रह मिलता है, लेकिन एक के लिए मैं नेस्टेड रिलेशनल डेटा लोड कर रहा हूं, जो नेस्टेड JSON बनाता है।पार्स नेस्टेड जेसन रीढ़ की हड्डी संग्रह

Backbone में मैं निम्नलिखित है Models:

App.Models.Sequence = Backbone.Model.extend({}); 
App.Models.Layer = Backbone.Model.extend({}); 
App.Models.Item = Backbone.Model.extend({}); 

और इन संग्रहों

App.Collections.Sequences = Backbone.Collection.extend({ 
    model: App.Models.Sequence, 
    url: '/api/sequences/' 
}); 

App.Collections.Layers = Backbone.Collection.extend({ 
    model: App.Models.Layer, 
    url: '/api/layers' 
}); 


App.Collections.Items = Backbone.Collection.extend({ 
    model: App.Models.Item, 
    url: '/api/items' 
}); 

मैं JSON के रूप में डेटा लोड:

[ 
       { 
       "id": "1", 
       "project_id": "8", 
       "name": "Seq1", 
       "layers": [ 
        { 
        "id": "1", 
        "name": "Layer11", 
        "sequence_id": "1", 
        "items": [ 
         { 
         "id": "1000000", 
         "layer_id": "1", 
         "itemtype_id": "1", 
         "position": "0" 
         }, 
         { 
         "id": "1000001", 
         "layer_id": "1", 
         "itemtype_id": "2", 
         "position": "0" 
         }, 
         { 
         "id": "1000002", 
         "layer_id": "1", 
         "itemtype_id": "2", 
         "position": "0" 
         }, 
         { 
         "id": "1000003", 
         "layer_id": "1", 
         "itemtype_id": "4", 
         "position": "0" 
         } 
        ] 
        }, 
        { 
        "id": "2", 
        "name": "Layer12", 
        "sequence_id": "1", 
        "items": [ 
         { 
         "id": "1000004", 
         "layer_id": "2", 
         "itemtype_id": "1", 
         "position": "0" 
         }, 
         { 
         "id": "1000005", 
         "layer_id": "2", 
         "itemtype_id": "2", 
         "position": "0" 
         }, 
         { 
         "id": "1000006", 
         "layer_id": "2", 
         "itemtype_id": "3", 
         "position": "0" 
         }, 
         { 
         "id": "1000007", 
         "layer_id": "2", 
         "itemtype_id": "4", 
         "position": "0" 
         } 
        ] 
        }, 
        { 
        "id": "3", 
        "name": "Layer13", 
        "sequence_id": "1", 
        "items": [ 
         { 
         "id": "1000008", 
         "layer_id": "3", 
         "itemtype_id": "1", 
         "position": "0" 
         }, 
         { 
         "id": "1000009", 
         "layer_id": "3", 
         "itemtype_id": "4", 
         "position": "0" 
         }, 
         { 
         "id": "1000010", 
         "layer_id": "3", 
         "itemtype_id": "5", 
         "position": "0" 
         } 
        ] 
        } 
       ] 
       }, 
       { 
       "id": "2", 
       "project_id": "8", 
       "name": "Seq2", 
       "layers": [ 
        { 
        "id": "4", 
        "name": "Layer21", 
        "sequence_id": "2", 
        "items": [] 
        }, 
        { 
        "id": "5", 
        "name": "Layer22", 
        "sequence_id": "2", 
        "items": [] 
        } 
       ] 
       }, 
       { 
       "id": "3", 
       "project_id": "8", 
       "name": "Seq3", 
       "layers": [ 
        { 
        "id": "6", 
        "name": "Layer31", 
        "sequence_id": "3", 
        "items": [] 
        }, 
        { 
        "id": "7", 
        "name": "Layer32", 
        "sequence_id": "3", 
        "items": [] 
        } 
       ] 
       } 
      ] 

मैं कैसे प्राप्त कर सकते हैं Sequences, Layers और Items मेरे संग्रह में?

+0

क्या आप तीन अलग-अलग संग्रहों का विश्लेषण करना चाहते हैं, जिनमें से प्रत्येक उदाहरण के लिए सभी संस्थाएं हैं, उदाहरण के लिए 'सभी' अनुक्रम 'से परत'? या एक नेस्टेड मॉडल संरचना जहां प्रत्येक 'अनुक्रम' में 'परत' उप संग्रह है? – jevakallio

+0

मुझे तीन अलग-अलग संग्रह की आवश्यकता है। – lunacafu

उत्तर

8

आप इस बड़े करीने से ऐसा करने के लिए अंडरस्कोर के flatten और pluck के संयोजन का उपयोग कर सकते हैं:

var data = { /* your JSON data */ }; 
var allSequences = _.clone(data); 
var allLayers = _.flatten(_.pluck(allSequences, 'layers')); 
var allItems = _.flatten(_.pluck(allLayers, 'items')); 

var sequences = new App.Collections.Sequences(allSequences); 
var layers = new App.Collections.Layers(allLayers); 
var items = new App.Collections.Items(allItems); 

आप दृश्यों और परतें अपने बच्चे वस्तुओं को शामिल नहीं करना चाहते हैं, तो ओवरराइड Model.parse उन्हें ट्रिम करने के लिए। उदाहरण के लिए:

App.Models.Sequence = Backbone.Model.extend({ 
    parse: function(attrs) { 
     delete attrs.layers; 
     return attrs; 
    } 
}); 

और प्रारंभ/parse:true विकल्प के साथ संग्रह जोड़ें:

var sequences = new App.Collections.Sequences(allSequences, {parse:true}); 

वगैरह।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^