2012-06-08 13 views
8

मैं अपने विचारों को प्रबंधित करने के लिए मैरियनेट क्षेत्र प्रबंधक का उपयोग कर रहा हूं। वहाँ तीन मुख्य क्षेत्र हैं: 1] प्रमुख मेनू क्षेत्र 2] साइडबार क्षेत्र 3] मुख्य क्षेत्र (वास्तविक पृष्ठ कि बदलते रहता है)क्षेत्र प्रबंधक में एक दृश्य छुपाएं, जब कोई अन्य दृश्य दिखाया गया है

शीर्ष मेनू और साइडबार पर कार्रवाई के आधार पर मैं दृश्य बदलते रहते हैं कि App.MainRegion.show(view) का उपयोग कर मुख्य क्षेत्रों में प्रस्तुत किया जाता है।

अब एक विशेष दृश्य (persistView) है जो एक बार प्रस्तुत किया जाना चाहिए जब तक कि टैब/ब्राउज़र बंद न हो जाए।

स्वाभाविक रूप से मैं foll कारणों के लिए यहाँ App.MainRegion.show(view) का उपयोग नहीं कर सकते हैं:

  1. जब show(persistView) पहली बार सब कुछ कहा जाता है ठीक है।
  2. यदि मैं show(otherview) पर नेविगेट करता हूं तो के close() पर कॉल करेगा। जो आवश्यक नहीं है।

मेरे वर्तमान समाधान है:

  1. एक नया क्षेत्र कहा जाता persistRegion सिर्फ mainRegion नीचे है।
  2. persistView हमेशा persistRegion में प्रस्तुत किया जाएगा।
  3. persistView की onShow() में, मैं mainRegion छिपाने के लिए और peristRegion

ऊपर काम करता है दिखाने लेकिन मुझे लगता है कि बहुत hackish है। चरण 3 के बाद भी मैं अटक गया हूं] उपयोगकर्ता किसी अन्य दृश्य में नेविगेट करता है। अब मैं persistView कैसे कहूं कि इसे खुद को छुपाएं और mainRegion दिखाएं?

किसी भी मदद की अत्यधिक सराहना की जाएगी।

उत्तर

25

मुझे लगता है कि एक क्षेत्र को मुख्य दृश्य बनाम "लगातार" दृश्य रखने के संदर्भ में आपका लेआउट ठीक लगता है। लेकिन मैं उन दोनों क्षेत्रों को एक-दूसरे के बारे में नहीं बताऊंगा या एक-दूसरे के प्रदर्शन को नियंत्रित करने की कोशिश नहीं करूंगा। इसके बजाय, मैं एक अलग वस्तु बनाउंगा जो जानता है कि यह कैसे करें।

यह ऑब्जेक्ट शामिल विभिन्न विचारों और क्षेत्रों से सही घटनाओं को सुनने के लिए जिम्मेदार होगा। फिर यह निर्धारित करेगा कि कौन से क्षेत्र दिखाना और छिपाना है।

कुंजी यह है कि आप क्षेत्रों को कैसे दिखाते हैं और छुपाते हैं। आप क्षेत्रों को बंद नहीं करना चाहते हैं और उनमें से विचारों को हटा सकते हैं - कम से कम, persistRegion नहीं। क्या आप के बजाय कर सकते हैं, हालांकि, hide() है इस क्षेत्र की el

persistRegion.$el.hide()

और

persistRegion.$el.show()

इस क्षेत्र की $el विशेषता उपलब्ध हो जाएगा के बाद एक दृश्य के क्षेत्र में प्रदर्शित किया गया है, या region.ensureElement() पर कॉल करने के बाद।

+6

सिर्फ एक नोट: region.ensureElement() को क्षेत्र में बदल दिया गया था .ensureEl() –

+1

... और यह फिर से बदल गया है, '_ensureElement()' – alxndr

1

मैं छिपाने और क्षेत्र के तत्व को दिखाने के बजाय मैरियनेट क्षेत्रों से रीसेट() विधि का उपयोग करने का सुझाव दे सकता हूं। यहां दस्तावेज़ http://marionettejs.com/docs/v2.4.4/marionette.region.html#reset-a-region => किसी क्षेत्र को किसी भी समय रीसेट किया जा सकता है। यह प्रदर्शित होने वाले किसी भी मौजूदा दृश्य को नष्ट कर देता है, और कैश किए गए एल को हटा देता है। अगली बार क्षेत्र एक दृश्य दिखाता है, क्षेत्र का एल डीओएम से पूछताछ की जाती है।

myRegion.reset(); यह तब उपयोगी होता है जब क्षेत्रों को उदाहरणों और यूनिट परीक्षण में फिर से उपयोग किया जाता है।

+1

आपको अपने उत्तर में लिंक से प्रासंगिक जानकारी शामिल करनी चाहिए ताकि आपको कि लिंक मरने की स्थिति में प्रासंगिक जानकारी खो नहीं जाती है। – drneel

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