2012-06-17 23 views
15

कॉल किए बिना पार्स का उपयोग पृष्ठ लोड पर मैं अपने संग्रह को अपने संग्रह में this technique के माध्यम से बूटस्ट्रैप कर रहा हूं। यह बहुत अच्छा काम करता है, लेकिन मैं एक ऐसे मुद्दे पर चल रहा हूं जहां मेरे पास उप-मॉडल हैं जिन्हें भी डालने की आवश्यकता है।backbone.js - fetch

उदाहरण के लिए, मैं पुस्तक नामक एक JSON संग्रह वापस करता हूं, और प्रत्येक पुस्तक सरणी में 10-20 मॉडल होते हैं जिन्हें स्वयं पेज कहा जाता है। यदि मैं सीधे पेजों को आज़माता हूं और एक्सेस करता हूं, तो मुझे [object][object] त्रुटि मिलती है क्योंकि बैकबोन यह नहीं समझ सकता कि यह किस प्रकार की ऑब्जेक्ट है।

पहले जब मैं fetch का उपयोग कर रहा था, तो मैं parse कार्रवाई वाले संग्रहों का उपयोग करके इसे प्राप्त कर दूंगा। parse में मैं की तरह कुछ करना होगा: कि मैं सीधे और नहीं fetch का उपयोग कर डेटा तक पहुँचने कर रहा हूँ अब

Collection_Books = Backbone.Collection.extend({ 
    model: Model_Book, 
    parse: function (response) { 
     response.Pages = new Collection_Pages(response.Pages); 
     return response; 
    } 
}); 

, प्रलेखन का तात्पर्य है कि मैं अब parse विधि की पहुंच है।

यदि मैं fetch का उपयोग नहीं कर रहा हूं या पेज लोड पर सर्वर को कॉल नहीं कर रहा हूं, तो मैं पुस्तकें> पेज उदाहरण का उपयोग करके उप-मॉडल कैसे लगा सकता हूं?

+0

यदि आप अपने कन्स्ट्रक्टर/प्रारंभिक विधि को थोड़ा समायोजित कर रहे हैं, तो आप निश्चित रूप से वहां बाल मॉडल सेट कर सकते हैं। इस पोस्ट के अंत की ओर थोड़ा और विवरण: http://bit.ly/KKHItJ – rjz

+0

आपकी _this तकनीक_ लिंक टूटा हुआ है – Madbreaks

उत्तर

11

अद्यतन: यह उत्तर अब पुराना है, uglymunky's answer अधिक अद्यतित जानकारी के लिए देखें।


आप सही हैं, parseonly specified to be called during fetch जब आप कच्चे डेटा से एक संग्रह का निर्माण कर रहे तो यह नहीं कहा जा जाएगा।

लेकिन, जब से तुम कच्चे डेटा है कि आप अपने संग्रह bootstrap करने के लिए प्रयोग कर रहे हैं पर नियंत्रण, आप अपने संग्रह के parse स्वयं को कॉल कर सकते हैं:

var c = new YourCollection(
    YourCollection.prototype.parse([ 
     // attribute data goes here... 
    ]) 
); 

डेमो: http://jsfiddle.net/ambiguous/kdaZ3/

आपका parse तरीकों (दोनों संग्रह और मॉडल) को उनके कॉलिंग संदर्भ की परवाह नहीं करनी चाहिए ताकि उन्हें प्रोटोटाइप से सीधे कॉल करना ठीक हो।

+1

मुझे लगता है कि यह तीसरी बार है जब आपने मुझे backbone.js के साथ बाहर निकाल दिया है। मैं आपको फिर से धन्यवाद देता हूं :) – boolean

56

सुनिश्चित नहीं हैं कि अगर यह नया है, लेकिन जैसे आप भी सिर्फ विकल्प पैरामीटर का parse संपत्ति सच करने के लिए अपने निर्माता के लिए सेट कर सकते हैं, इस प्रकार आपके पार्स विधि का उपयोग करने निर्माता कह यह लग रहा है:

modelInstance = new MyModel(obj, {parse: true}); 

http://backbonejs.org/#Model-constructor

+1

नोट: यह संग्रह कन्स्ट्रक्टर पर भी काम करता है उदा। var books = new collection_Books (json, {parse: true}); – Element

+2

यह अब स्वीकार्य उत्तर होना चाहिए ... – Ben

+0

यह नया व्यवहार है, जब प्रश्न पूछा गया था तो बैकबोन के पास यह विकल्प नहीं था। मुझे लगता है कि हमें "स्वीकृति" स्विच होने तक बस इंतजार करना होगा। –