मेरे पास Member
नामक एक रीढ़ की हड्डी मॉडल है - इसमें सदस्यता नाम जैसे अंतिम नाम, अंतिम नाम, ईमेल, फोन इत्यादि शामिल हैं। इसमें बहु-मूल्यवान फ़ील्ड भी शामिल हैं जिन्हें मुझे संग्रह के रूप में रखने की आवश्यकता है - ये Degrees
और Affiliations
हैं।संग्रह को शामिल करने के लिए बैकबोन मॉडल में मैं सही ढंग से पार्स कैसे कार्यान्वित कर सकता हूं?
मेरे मॉडल में fetch()
विधि को कॉल करते समय मैं जिस समस्या को चला रहा हूं वह यह है कि मूल सरणी और मेरे मॉडल में संग्रह ऑब्जेक्ट्स के बीच एक प्रकार का प्रतिबाधा है। चूंकि parse
परिभाषा के अनुसार set
में मूल्य निर्धारित करने के बजाय 0 हैमें उपयोग किया जाना है, इसलिए मेरे संग्रह को इस तरह से सेट करना असंभव है। उदाहरण के लिए - यदि मैं Degrees
के लिए एक जावास्क्रिप्ट ऑब्जेक्ट देता हूं जो निम्न जैसा दिखता है: {degrees: [{id: 1, title: "PhD"}]}
, तो यह मेरे degree
संग्रह को एक फ्लैट सरणी में परिवर्तित करता है। यहाँ मेरी कोड है:
window.Models.Member = Backbone.Model.extend({
url: '/api/member',
initialize: function() {
_.bindAll(this);
this.set('degrees', new window.Collections.DegreesList());
this.fetch();
},
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
// When this is run, this.get('degrees') will now return a flat array rather than a DegreesList collection
setHash.degrees = _(response.degrees).each(function(item) {
return {id: item.id, title: item.title}
});
return setHash;
}
});
मैं मैन्युअल रूप से मेरी पार्स समारोह में संग्रह सेट कर सकते हैं, लेकिन वह अपनी रीढ़ रास्ते को नष्ट, और hacky की तरह लगता है।
संपादित करें: मैं अस्थायी रूप से निम्न कार्य करके समस्या को हल किया है:
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
this.get('degrees').reset(response.degrees);
return setHash;
}
मुझे शक है इस इष्टतम समाधान है, लेकिन यह निश्चित रूप अब के लिए काम करता है। मैं बेहतर सुझावों के लिए खुला हूं।
इस प्रयास करें: खाई 'पार्स:' समारोह (ऐसा नहीं प्रतीत नहीं होता है), और इसके बजाय 'प्रारंभ करें: 'मैन्युअल रूप से' सरणी 'विशेषता को सरणी से बैकबोन संग्रह में बदल दें ... –
' पर्स' विधि 'fetch' विधि लौटने के बाद स्वचालित रूप से कॉल हो जाती है। मैं 'fetch' कहने के बाद मैन्युअल रूप से 'डिग्री' विशेषता को संग्रह में रीसेट कर सकता हूं, लेकिन तब मेरे पास उस संग्रह में कोई भी डेटा नहीं होगा जो मैं चाहता हूं ... और डेटा आ रहा है। – rybosome
आपके पास होगा यदि आप मैन्युअल रूप से उन्हें 'पार्स' में जोड़ते हैं तो 'डिग्री' के साथ बहुत सी चीजें करने के लिए। @ ŠimeVidas के सुझाव के साथ जाएं और उनके लिए बैकबोन संग्रह का उपयोग करें। यह आपको प्रत्येक 'डिग्री' बैकबोन तरीके से निपटने देता है। – sntran