2011-06-21 14 views
5

प्रश्न: प्रलेखन दुर्लभ है, और मैं एक नोब का कुछ हूं - क्या कोई बैकबोन बांधने के लिए उचित (मान लेता है) एक तरीका है बैकबोन के उदाहरणों के लिए देखता है। डोमेन मॉडल को अद्यतन/प्रतिपादन के लिए रिलेशनल मॉडेल (रीढ़ की हड्डी से relational.js)? मैंने थोड़ी सी सफलता के साथ बैकबोन में सामान्य मॉडल/व्यू बाध्यकारी के आधार पर विभिन्न दृष्टिकोणों की एक मुट्ठी भर कोशिश की है।बैकबोन-relational.js + बैकबोन। दृश्य (0)

पृष्ठभूमि की कहानी (/ अधिक जानकारी): मैं Backbone.js के साथ रस्सियों सीख रहा हूँ, और पिछले सप्ताह भर में एक बहुत लेने के लिए किया है। अगर मुझे कुछ स्पष्ट याद आ रहा है (जो अत्यधिक संभावना है - नीचे मेरी समस्या को संभालने के लिए "दाएं" तरीके सहित), कृपया मुझे कॉल करें।

मैं एक मोंगोडब समर्थित बैकस्ट इंटरफ़ेस से निपट रहा हूं (कि मेरे पास पूर्ण नियंत्रण नहीं है - या मैं सर्वर-पक्ष पर फिर से आर्किटेक्टिंग व्यवहार करूँगा) जो नेस्टेड शब्दकोशों का भारी लाभ लेता है, इसलिए मैं बैकबोन में सबसे अच्छा प्रतिनिधित्व करने के तरीके पर पढ़ रहा हूं (बैकबोन प्रदान करता है कि महान बचत() + सर्वर सिंक सामान तोड़ने के दौरान)।

मैंने दो विकल्प देखे हैं: backbone-relational और ligament.js

मैंने रीढ़ की हड्डी-relational.js के साथ शुरू किया है, और रिलेशनल मॉडल्स (रीढ़ की हड्डी के मानक मॉडल के लिए रीढ़ की हड्डी-रिलेशनल का प्रतिस्थापन) है जो आरईएसटी इंटरफ़ेस द्वारा वापस दिए गए पेड़ के विभिन्न शब्दकोशों के लिए बनाया गया है। उनके बीच संबंध परिभाषित किए जाते हैं, और प्रत्येक मॉडल (जेएसओएन को उनके संबंधित प्रारंभिक कार्यों में) से जेएसओएन लॉगिंग करने से पता चलता है कि कुल संग्रह स्तर पर उन्हें fetch() कमांड पर सर्वर से सही तरीके से लोड/लोड किया जा रहा है।

तो, यह सब बढ़िया है।

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

कोई अंतर्दृष्टि बहुत सराहना की जाएगी, बहुत सराहना की जाएगी।

नीचे Raynos उत्तर के लिए सीधी प्रतिक्रिया में (धन्यवाद Raynos!): अगर मैं UpperLevelModels (UpperLevelCollection यूआरएल) सर्वर पर/(UpperLevelModel आईडी) में मौजूदा साथ UpperLevelCollection के लिए एक आधार यूआरएल परिभाषित, मैं कैसे होगा उन UpperLevelCollections को सर्वर-साइड से प्रत्येक UpperLevelModel के लिए एक JSON डंप के भीतर शब्दकोश कुंजी में मानचित्र करें? दूसरे शब्दों में, मॉडल के भीतर संग्रह का उपयोग कर इस तरह के सर्वर से डेटा डंप को सही ढंग से संभाल सकता है (जाहिर है बहुत सरल है, लेकिन इस मुद्दे पर आता है) और ठीक से इसे वापस/अपडेट/सिंक करें?

[{ 
    "some_key": "Some string", 
    "labels": ["A","List","Of","Strings"], 
    "content": [{ 
     "id": "12345" 
     "another_key": "Some string", 
     "list": ["A","list","of","strings"], 
    },{ 
     "id": "67890" 
     "another_key": "Some string", 
     "list": ["A","list","of","strings"], 
    }], 
}] 

उत्तर

2

आम तौर पर नेस्टेड शब्दकोशों के लिए मैं निम्नलिखित दृष्टिकोण

var UpperLevelCollection = Backbone.Collection.extend({ 
    model: UpperLevelModel 
    }), 
    UpperLevelModel = Backbone.model.extend({ 
    initialize: function() { 
     this.nested = new LowerLevelCollection; 
    } 
    }), 
    LowerLevelCollection = Backbone.Collection.extend({ 
    model: LowerLevelModel 
    }), 
    LowerLevelModel = Backbone.Model.extend({}); 

बस घोंसला उन संग्रह मॉडल के अंदर नीचे सभी तरह से ले लो।

+0

धन्यवाद रेनोस। इस तरह मैंने मूल रूप से इसका संपर्क किया, लेकिन थोड़ा चिंतित हो गया कि यह सर्वर (और बचत/समन्वयन के साथ) के साथ अच्छी तरह से खेल नहीं पाएगा यदि ऊपरी स्तर के लिए यूआरएल वास्तव में पूर्ण पेड़ लौटाता है (लोअरलेवल मॉडल्स को " सामग्री "कुंजी)। मैंने अपनी मूल पोस्ट में एक हिस्सा जोड़ा है (यहां उत्तर के लिए बहुत सारे पात्र)। सहायता के लिए फिर से धन्यवाद - मैं अपनी गहराई से स्पष्ट हूं (स्पष्ट रूप से)। – ltd

+0

@ लि। ओवरराइड '.parse' [उदाहरण] (http://stackoverflow.com/questions/5931898/persisting-loading-metadata-in-a-backbone-js-collection/5932429#5932429) और' .toJSON' ओवरराइड करें डेटा काम पढ़ने और लिखने के लिए। toJSON ऑब्जेक्ट (एक जेसन स्ट्रिंग नहीं) को वापस लेना चाहिए जिसे आप सहेजते समय मोंगो को भेजना चाहते हैं। – Raynos

+0

ग्रेट - धन्यवाद फिर से। जैसा कि आपने सुझाव दिया है मैंने मॉडल को काम किया है, और यह सब डेटा-साइड पर बहुत अच्छा काम कर रहा है। अब, आखिरी सवाल (मुझे उम्मीद है): UpperLevelModel व्यू के भीतर ऐड/रीफ्रेश/इत्यादि को जोड़ने का सही तरीका क्या है (मान लीजिए कि वह कहां होगा?) लोअरलेवल मॉडेल/संग्रह में? शीर्ष ऐप-व्यू स्तर पर, मैं उन घटनाओं को ऊपरी स्तर के दृश्यों को प्रस्तुत करने के लिए बाध्य कर सकता हूं, लेकिन बच्चों के मॉडल/विचारों की बात होने पर मुझे कुछ परेशानी हो रही है। वैकल्पिक रूप से, क्या मुझे सिर्फ एक दृश्य में अपरलेवल मॉडेल (बच्चों के संग्रह/मॉडल सहित) प्रस्तुत करना चाहिए? – ltd

1

समस्या यह हो सकती है कि जब आप अपने आप में नया डेटा लोड करते हैं तो माता-पिता मॉडेल, आपके बच्चे का संग्रह AFAIK वास्तव में नहीं लाया जाता है, इसे मिटा दिया जाता है और एक नए संग्रह द्वारा प्रतिस्थापित किया जाता है (रीढ़ की हड्डी-रिलेशनल में लाइन 584 पर बैकबोन.हासमेन। ऑन चेंज देखें। जे एस)। इस प्रकार बाल संग्रह पर आपके स्वयं के बाइंडिंग चले गए हैं।

यह मेरी राय में, रीढ़ की हड्डी से संबंधित एक कमजोरी है। यह व्यवहार कॉन्फ़िगर करने योग्य होना चाहिए, एक विकल्प के साथ जहां एक धीमी खोज-और-अद्यतन-दृष्टिकोण का उपयोग वाइप-एंड-प्रतिस्थापित करने के बजाय किया जाता है।

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