2012-04-30 19 views
48

मैं यह पता लगाने की कोशिश कर रहा हूं कि backbone.js के साथ संग्रह का संग्रह कैसे करें। मैं रीढ़ की हड्डी के लिए काफी नया हूँ।Backbone.js संग्रह का संग्रह

+---------------+    +------------------+ 
| Playlists  |    | Playlist   | 
|---------------|   0..* |------------------| 
|    +-------------->| Name    | 
|    |    |     | 
|    |    |     | 
+---------------+    +-------+----------+ 
             | 
             | 
             |0..* 
             v 
           +------------------+ 
           | Track   | 
           |------------------| 
           | Name    | 
           | Artist   | 
           |     | 
           +------------------+ 

कोड में यह इस के समान दिखता है:

var trackModel = Backbone.Model.extend({ 
    //trackdata 
}); 

var playlistModel = Backbone.Collection.extend({ 
    model : trackModel, 
    url : "playlist" 
}); 

var playlistsModel = Backbone.Collection.extend({ 
    url : "playlists", 
    model : playlistModel //This pretty sure doesn't work like I want, because there is no model attribute for collections :S 
}); 

हालांकि मैं हमेशा js कंसोल में कोई त्रुटि प्राप्त कह रही:

Uncaught TypeError: Object [object Object] has no method '_validate' 

जब मैं निम्नलिखित स्थिति की तरह कुछ है मैं एक फ़ंक्शन निष्पादित करने का प्रयास करता हूं जो मान्य करता है (जैसे जोड़, fetch, ...)

यह मी यदि मैं validate या _validate फ़ंक्शन किसी भी संग्रह या मॉडल में जोड़ता हूं तो कोई फर्क नहीं पड़ता।

मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि backbone.js संग्रह में संग्रह का समर्थन नहीं करता है। क्या कोई और तरीका है जो काम करता है?

अद्यतन:

यह है कि यह कैसे अभी

var Track = Backbone.Model.extend({ 
    //trackdata 
}); 

var Tracks = Backbone.Collection.extend({ 
    model:Track; 
}); 

var Playlist = Backbone.Model.extend({ 
    //name : ... 
    tracks: new Tracks() 
}); 

var Playlists = Backbone.Collection.extend({ 
    url : "playlists", 
    model : Playlist 
}); 
+0

लगता रीढ़ डॉक्स अब नेस्टेड मॉडल और संग्रह, बहुत उदाहरण यहां के समान पर एक अनुभाग शामिल की तरह: http://backbonejs.org/#FAQ-nested –

+0

पहले - खुशी है कि आप अपनी समस्या को हल किया। उम्मीद है कि यह कुछ अन्य लोगों के लिए उत्तर देगा, लेकिन आपकी समस्या गलत तरीके से परिभाषित डेटा मॉडल से आती है - कोई "प्लेलिस्ट" नहीं है (आपके पास केवल एक प्लेलिस्ट ऑब्जेक्ट है, जिसे एक ही स्थान पर समूहीकृत किया जाता है), आपके डेटा में केवल "प्लेलिस्ट" और " ट्रैक ", और संबंध 1 प्लेलिस्ट में कई ट्रैक हो सकते हैं। आपके सरल (हल) उदाहरण में यह पैटर्न बहुत स्पष्ट दिखाई देता है। – Dainius

उत्तर

30

आप अपनी समस्या को हल चाहते हैं एक मॉडल में एक संग्रह से अपने Playlist बदल कर लग रहा है। यदि आप इसके बारे में सोचते हैं, तो Playlist में शायद अन्य विशेषताएँ होंगी (उदा। नाम) जो संग्रह पर सेटटेबल नहीं होगी।

Playlists तब Playlist मॉडल (संग्रह के बजाय) का संग्रह होगा, जो बिना त्रुटि के काम करना चाहिए।

var Track = Backbone.Model.extend({ 
    //trackdata 
}); 

var Playlist = Backbone.Model.extend({ 
    model : Track 
}); 

var Playlists = Backbone.Collection.extend({ 
    url : "playlists", 
    model : Playlist 
}); 
+0

धन्यवाद, पूरी तरह से काम करने लगता है: डी हालांकि मैं एक पूरक संग्रह की जरूरत है, एक प्लेलिस्ट एकाधिक पटरियों हो सकता है क्योंकि: वर ट्रैक = Backbone.Model.extend ({ // trackdata }); var Tracks = Backbone.Collection.extend ({ मॉडल: ट्रैक; }); var प्लेलिस्ट = बैकबोन.मोडेल.क्स्टेंड ({ मॉडल: ट्रैक }); var प्लेलिस्ट = बैकबोन.कोलेक्शन.extend ({ यूआरएल: "प्लेलिस्ट", मॉडल: प्लेलिस्ट }); मुझे आशा है कि सब कुछ सर्वर के साथ सिंक्रनाइज़ेशन के साथ समस्याओं के बिना काम करेगा। – krial

+0

मुझे यकीन नहीं है कि दृष्टिकोण काम करेगा - आप बस किसी अन्य संग्रह के मॉडल के रूप में 'बैकबोन.कोलेक्शन' (यानी 'ट्रैक') का विस्तार सेट नहीं कर सकते हैं। आप अभी भी 'Track' को अपनी' Playlist.model' के रूप में रखना चाहते हैं, और फिर भी आप समन्वयन को सुविधाजनक बनाने में सहायता के लिए 'ट्रैक' संग्रह का उपयोग कर सकते हैं। –

+0

मैंने प्रश्न में कोड अपडेट किया है। मैंने संग्रह को किसी अन्य संग्रह के मॉडल के रूप में सेट नहीं किया है। मैंने मॉडल प्लेलिस्ट (मॉडल को विस्तारित) की विशेषता के रूप में सहकर्मी (ट्रैक) सेट किया है। यदि मैंने जवाब में कहा था कि मैंने ऐसा किया होगा: 'प्लेलिस्ट-> मॉडल: ट्रैक', मैं केवल प्लेलिस्ट के अंदर एक ट्रैक स्टोर कर सकता हूं, क्योंकि प्लेलिस्ट मॉडल को बढ़ाती है और मॉडल के पास विशेषता मॉडल का संग्रह करने के लिए कोई तरीका नहीं है ... या मैं गलत हूँ? – krial

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