मैं तुम्हें ऐसा ही कुछ लग रहा है JSON में एक श्रेणी/गई वस्तुओं की सूची प्राप्त कर रहे हैं संभालने हूँ इस ...
{
'id': 1,
'name': 'My 1st Category',
'children': [
{
'id': 2,
'name': 'My 2nd Category',
'children': []
},
{
'id': 1,
'name': 'An Item',
'price': 109.99
}
]
}
Backbone.js बॉक्स है कि एक संग्रह में एक से अधिक मॉडल का समर्थन करता है से बाहर कुछ भी नहीं है, लेकिन यह भी मॉडल के प्रकार आप एक संग्रह में डाल पर कोई प्रतिबंध नहीं है ।
संग्रह परिभाषा में मॉडल प्रकार निर्दिष्ट करना केवल एक चीज है, यह बैकबोन को यह जानने देता है कि क्या आप मॉडल प्रकार को बनाने के लिए Backbone.Model
ऑब्जेक्ट के बजाय संग्रह में कच्चे JSON को पास करते हैं। यदि आप एक संग्रह में Item
मॉडल जोड़ते हैं जिसमें पहले से ही कुछ Category
मॉडल शामिल हैं, तो बैकबोन को मॉडल सूची में पॉप-अप करने में कोई समस्या नहीं होगी; यह किसी भी प्रकार की जांच नहीं करता है।
तो इस बात को ध्यान में रखते हुए, आप केवल कच्चे JSON को छोड़कर संग्रह ऑफ़र के बारे में सब कुछ उपयोग कर सकते हैं; आपको इसे स्वयं संभालना होगा। तो आपके विकल्प या तो पहले से ही अपने मॉडल का निर्माण करना है, उन्हें Backbone.Model
ऑब्जेक्ट्स में बनाना, या ऐसा कुछ बनाना जो आपके लिए पार्सिंग करेगा।
दूसरे विकल्प के लिए, पार्सर, मैं आपके कच्चे JSON युक्त संग्रह में एक विशेष चर पारित करने का सुझाव देता हूं, फिर अपने initialize
फ़ंक्शन में इसे संभालने का सुझाव देता हूं। यहाँ एक उदाहरण है:
var CategoryCollection = Backbone.Collection.extend({
initialize: function(m, models) {
_.each(models, function(model) {
var modelObject = null;
if (model.price !== undefined) {
modelObject = new Item(model);
} else {
modelObject = new Category(model);
}
this.add(modelObject);
}, this);
}
});
तो यह एक छोटे से hacky है, लेकिन आप मॉडल के प्रकार के आधार का निर्धारण करता है, तो यह (मेरे उदाहरण में price
) एक विशेष क्षेत्र है, मॉडल वस्तु बनाने, तो है कि जोड़ने संग्रह।
var myCollection = new CategoryCollection([], myJSON);
सूचना आपके पास पहले तर्क के रूप में एक खाली सरणी के बाद से है कि आप किस प्रकार सामान्य रूप से संग्रह करने के लिए मॉडल का एक सेट को भेज देते हैं पारित करने के लिए:
फिर आप इसे इस तरह फोन चाहते हैं।
जब संग्रह का उपयोग करने पर बाद में, आप तय कर सकते हैं अगर आप एक सरल instanceof
जांच का उपयोग कर एक Item
या Category
साथ काम कर रहे:
_.each(myCollection.models, function(model) {
if (model instanceof Item) {
console.log("It's an Item! Price: ", model.get("price"));
} else {
console.log("It's a Category!");
}
});
संक्षेप में, मैं कहूंगा, "मैं नहीं देखता क्यों नहीं", लेकिन मैं उत्सुक हूं कि दूसरों क्या कह सकता है। – JayC