7

मैरियनेट लेआउट दिखाने, छिपाने और फिर दिखाने में परेशानी हो रही है। मेरा मानना ​​है कि यह समस्या नियमित बैकबोन व्यू और मैरियनेट आइटम व्यू पर भी लागू होती है।दिखा रहा है, छिपा रहा है, फिर लेआउट ब्रेक को फिर से दिखा रहा है घटनाक्रम

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

बच्चे लेआउट initialize पैरेंट लेआउट के फ़ंक्शन में बनाए जाते हैं और फिर से उपयोग किए जाते हैं क्योंकि नेविगेशन उन्हें वापस ले जाने पर उनके राज्यों को संरक्षित करने की आवश्यकता होती है। इतना Video Link

धन्यवाद:

enter image description here

यहां पर एक विडियो टूटी हुई घटनाओं दिखा है:

यहाँ एक sample application यह दर्शाता है कि मैं क्या बात कर रहा हूँ है!

+1

एक छोटी सी चकित है कि इस सवाल का downvoted गया ... –

+1

मैं ने इस downvoted पता नहीं है, लेकिन मैंने सोचा था कि प्रश्न प्रयास से पता चला है, अनुसंधान , और स्पष्टता। –

उत्तर

4

समस्या यह है कि आप अपने उप-लेआउट का नया आबादी नहीं बनाते हैं, और केवल अपने मुख्य लेआउट में शुरू किए गए एक का पुनः उपयोग करें। तो जब आप अपने क्षेत्र की सामग्री को बदलते हैं तो घटनाएं मैरियनेट के व्यू के क्लोज़() फ़ंक्शन के हिस्से के रूप में अनबाइंड हो जाती हैं।

आप इस तरह अपने इनिशियलाइज़ समारोह बदलना चाहिए:

initialize: function(){ 
    _.bindAll(this); 
    // CREATE SUB LAYOUTS 
    this.tab1Layout = B.tab1Layout; 
    this.tab2Layout = B.tab2Layout; 
}, 

और इस तरह से लेआउट फोन:

// EVENT HANDLERS 
on_show_tab_1_click: function(event){ 
    this.content.show(new this.tab1Layout()); 
}, 
on_show_tab_2_click: function(event){ 
    this.content.show(new this.tab2Layout()); 
} 
+0

मुझे बाल लेआउट के राज्यों की रक्षा करने की आवश्यकता है। क्या हर बार बाल लेआउट को फिर से बनाये बिना ऐसा करने का कोई तरीका है? –

+0

मुझे लगता है कि आप अपने उप-लेआउट में 'क्लोज़()' फ़ंक्शन को ओवरराइड कर सकते हैं ताकि जब आप उन्हें बंद करते हैं तो ईवेंट को अनदेखा नहीं किया जाएगा। मूल बंद फ़ंक्शन (पंक्ति 182) के लिए रीढ़ की हड्डी मेरियनेट के स्रोत कोड की जांच करें और अपनी आवश्यकताओं के लिए इसका "प्रकाश" संस्करण बनाने का प्रयास करें। – Ingro

2

आप के लिए नहीं करना चाहते हैं को पुनः आरंभ कर हर पर टैब बार देखा गया टैब परिवर्तन आप view.delegateEvents() मैन्युअल रूप से कॉल कर सकते हैं:

// views[] is array of initialized tab views 
// Swap from displaying views[0] to views[1] 
currentTabIndex = 1 
this.myRegion.show(views[currentTabIndex]) 
views[currentTabIndex].delegateEvents() 

राज्य को संरक्षित करने के लिए, दूसरा विकल्प है दोनों टैब रेंडर करने के लिए और केवल निष्क्रिय टैब क्षेत्र को छिपाने:

// Assume both regions have initialised views, tab2Region is hidden, 
// tab1Region is shown. 
// Swap between tabs: 
this.tab1Region.$el.hide() 
this.tab2Region.$el.show() 
संबंधित मुद्दे