2011-09-05 14 views
5

मेरे पास क्लासिक मास्टर-विवरण परिदृश्य है जिसे मैं backbone.js में कार्यान्वित कर रहा हूं।Backbone.js मास्टर-विस्तार परिदृश्य

पल मैं backbone.js तो मैं यह लंघन कर रहा हूँ के इतिहास और नेविगेशन भाग के साथ संबंध नहीं कर रहा हूँ के लिए।

  • मेरे पास एक ग्रिड व्यू है जहां सभी मॉडल लाए जाते हैं और बाकी सेवा से प्रदर्शित होते हैं।
  • मेरे पास एक विवरण दृश्य (मोडल विंडो) है जहां ग्रिड से एक विशेष चयनित मॉडल मास्टर ग्रिड व्यू में दिखाई देने वाले अधिक फ़ील्ड के साथ प्रदर्शित होता है।

मैं लागू कर दिया है:

  • एक मुख्य आवेदन जहां सभी रीढ़ विचारों और रूटर जुड़े होते हैं।
  • आवेदन दस्तावेज़ पर आरंभ नहीं हो जाता के लिए जिम्मेदारियों के साथ भरी हुई
  • एक मुख्य बैकबोन रूटर (के रूप में अधिक एक शास्त्रीय "नियंत्रक" अभिनय):
    • बनाने और नष्ट विचारों
    • प्राप्त कर रहा है और पोस्टिंग डेटा
    • गुजर विचारों के लिए डेटा
    • समन्वय विचारों घटनाओं

अब ग्रिड व्यू (बैकबोन संग्रह) के लिए बाकी सेवा से लौटा गया डेटा मॉडल के कुछ आंशिक डेटा है।

तो किसी विशेष मॉडल के पूर्ण विवरण को प्रदर्शित करने के लिए मुझे बाकी सेवा से विवरण फिर से प्राप्त करना होगा।

संग्रह से डिस्कनेक्ट किए गए मॉडल के साथ मॉडल के अंत तक पहुंचना और उस पर कोई भी अपडेट संग्रह पर ही दिखाई नहीं देता है और मुझे फिर से सभी डेटा लाने वाले मास्टर व्यू को ताज़ा करना होगा।

विवरणों को नष्ट करना और पुनर्निर्माण करना कभी-कभी इसे दृश्य घटनाओं को ढीला कर देता है।

इस परिदृश्य का सही कार्यान्वयन क्या होगा? मैं रीढ़ की हड्डी में चीजों को करने का सबसे अच्छा तरीका पूरी तरह समझ नहीं रहा हूं।

उत्तर

7

सबसे पहले, मैं आपके "ग्रिड व्यू" संग्रह क्वेरी में मॉडल के लिए पूर्ण विवरण लौटने का सुझाव दूंगा। यह 'डिस्कनेक्ट संग्रह' मुद्दा हल करता है।

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

इसके अलावा, विस्तार के विचारों के लिए, मैं सुझाव दूंगा, विशेष रूप से यदि आप डिज़ाइन केवल एक विवरण देखने के लिए सक्रिय हैं, तो दृश्य का पुन: उपयोग करने और दृश्य में एक फ़ंक्शन लिखने के लिए जो आपको मॉडल को स्वैप करने की अनुमति देता है।

तो, सारांश में:

  • आवेदन शुरू, लोड एक GridView और एक detailView पर।
  • आपके विवरण को दोबारा प्रदर्शित करें मॉडल को इस पर सेट करने की अनुमति देने के लिए देखें। (detailView.setModel (..)
  • जब उपयोगकर्ता किसी मॉडल पर विवरण देखना चाहता है, तो उस मॉडल को विस्तार से देखें, ऊपर दिए गए फ़ंक्शन का उपयोग करके देखें।
  • यदि मॉडल पूरी तरह से लोड नहीं होता है, तो आपकी सेट मॉडल विधि जाओ और fetch() शेष डेटा। आप या तो एक विशिष्ट संपत्ति के लिए परीक्षण कर सकते हैं जो केवल पूर्ण लोड पर होगा, या मॉडल पर एक संपत्ति सेट करेगी यह इंगित करने के लिए कि यह पूरी तरह से लोड हो गया है।
  • यदि आप स्वयं पाते हैं घटनाओं को खोना, अपने प्रस्तुत करने के अंत में प्रतिनिधि एवेन्ट्स() को कॉल करने का प्रयास करें() फ़ंक्शन इसे ईवेंट को दोबारा शुरू करें।
  • चूंकि उसी मॉडल का उपयोग ग्रिड व्यू संग्रह और विवरण दोनों में किया जा रहा है, मान लीजिए कि आप परिवर्तन घटनाओं का जवाब दे रहे हैं ठीक है, पूर्व संध्या rything सिंक्रनाइज़ किया जाना चाहिए।