2012-09-08 16 views
6

मैं गतिशील इस तरह अपने आवेदन में नियंत्रक बनाने के लिए:नियंत्रक ExtJS को कैसे हटाएं?

var loadedController = me.app.getController(controller_name); 
      loadedController.init(); 

मैं कैसे उपयोग करने के बाद इस नियंत्रक को हटा सकते हैं? धन्यवाद।

उत्तर

12

ExtJs वर्तमान में बॉक्स से बाहर नियंत्रक को हटाने का समर्थन नहीं करता।

  • एक विधि uncontrol कि सभी घटना श्रोताओं को इस नियंत्रक EventBus पर पंजीकृत unregisters साथ Ext.app.EventBus बढ़ाएँ: सफाई एक नियंत्रक करने के लिए, निम्न कार्य करें। कार्यान्वयन प्राप्त करने के लिए Ext.app.EventBus#control का स्रोत देखें। या this one का उपयोग करें।
  • Ext.app.Application एक विधि removeController के साथ विस्तार करें जो controllers संग्रह से दिए गए नियंत्रक उदाहरण को हटा देता है। यह एक Ext.util.MixedCollection है, Ext.app.Application#getController के लिए स्रोत देखें। फिर uncontrol का उपयोग कर उस नियंत्रक के लिए सभी पंजीकृत श्रोताओं को साफ़ करें।
  • एक destroy विधि या तो लागू अपने विशिष्ट नियंत्रक पर और/या Ext.app.Controller का विस्तार। आपको कम से कम clearManagedListeners() पर कॉल करना चाहिए और संभावित रूप से इस कंट्रोलर द्वारा बनाए गए अन्य ऑब्जेक्ट्स जैसे दृश्य या स्टोर को नष्ट करना चाहिए, यदि यह आपके एप्लिकेशन आर्किटेक्चर और कंट्रोलर लाइफ-साइकल के अनुरूप है।
+0

अच्छा जवाब, आपने विषय में गहरा खोला :) –

+0

अच्छा जवाब! इसे सेन्चा – sra

+0

पर फीचर अनुरोध के लिए रखा जाना चाहिए अच्छा जवाब, आपने जो कुछ भी हटाना है उसे कवर किया है :) नियंत्रक वास्तव में हटाए जाने पर आप कैसे परीक्षण करते हैं? – bhovhannes

0

आप obj.destroy() के साथ किसी भी Ext वर्ग को नष्ट कर सकते हैं। ऑब्जेक्ट के सभी संदर्भों को भी हटाने के लिए याद रखें ताकि यह कचरा-संग्रहित हो सके।

2

सेन्चा मंचों पर एक प्रीमियम सदस्य अनुरोध शुरू किया गया है। दुर्भाग्यवश, अगस्त से मूल अनुरोध कोई शब्द नहीं है। मैंने इस धागे के संदर्भ में उस अनुरोध को अभी टक्कर लगी है।

The Sencha Forum Topic (Premium section)

0

getController() विधि एक नया नियंत्रक वस्तु बनाता है और भंडार controllers सरणी में इसे करने के लिए संदर्भ।

इसका मतलब है, यदि नियंत्रक getController() का उपयोग करके लोड किया गया है, तो इसे हटाया नहीं जाएगा, क्योंकि controllers में ऑब्जेक्ट ऑब्जेक्ट की संपत्ति में संग्रहीत कम से कम एक संदर्भ होगा।

नियंत्रक को इस तरह से लोड करने के लिए (जैसे ही यह कब्जा कर लेता है) को लोड करने के लिए जैसे ही यह मौजूदा वस्तुओं (डीओएम तत्व, एक्सटी घटक, इसके विचार इत्यादि) के किसी भी संदर्भ को खो देगा, किसी को Ext.create का उपयोग करना चाहिए getController() का।

var loadedController = Ext.create(
    me.app.getModuleClassName(controller_name, 'controller'), 
    { 
     application: me.app, 
     id: Ext.id(null, 'controller') 
    } 
); 
loadedController.init(me.app); 
loadedController.onLaunch(me.app); 

loadedController स्थानीय चर हो जाएगा और दायरे से बाहर निकलना होगा:
यहाँ कोड है। एकमात्र चीज जो नए बनाए गए नियंत्रक को 'वास्तविक जीवन' में बांधना जारी रखेगी वह तत्व होगा जो नियंत्रक स्वयं बनाता है।
उदाहरण के लिए, नियंत्रक उसकी onLaunch() विधि है, जो डोम में इंजेक्ट किया जाएगा में एक नया दृश्य बना सकते हैं, और नियंत्रक संचालकों उसकी init() विधि में बाँध का उपयोग कर घटनाओं को देखने के सुनेगा। जब तक दृश्य मौजूद रहेगा, नियंत्रक भी मौजूद रहेगा। लेकिन जब उपयोगकर्ता दृश्य को बंद कर देता है, तो दृश्य नष्ट हो जाएगा और चूंकि यह हमारे नियंत्रक का अंतिम संदर्भ था, नियंत्रक भी नष्ट हो जाएगा।नियंत्रक के साथ बनाया

अद्यतन
श्रोताओं Ext.app.EventBus के साथ जोड़ दिया जा रहा है और, नियंत्रक को अपने आप निकलने रोक सकता है क्योंकि वे भी है कि नियंत्रक के लिए संदर्भ रख सकते हैं।