क्या यह निर्धारित करने का कोई तरीका है कि कौन सा ईवेंट श्रोताओं को प्रदर्शन ऑब्जेक्ट के साथ पंजीकृत किया गया है? मैं एक प्रदर्शन ऑब्जेक्ट से सभी ईवेंट श्रोताओं को हटाना चाहता हूं ताकि मैं एप्लिकेशन में संदर्भ परिवर्तनों के आधार पर नए को असाइन कर सकूं।प्रदर्शन ईवेंट से सभी ईवेंट श्रोताओं को कैसे हटाएं?
उत्तर
jeceuyper सही है ...
एक पक्ष नहीं है, हालांकि: DisplayObject
EventDispatcher
, जो पहले से ही IEventDispatcher
को लागू करता है फैली हुई है ... इसलिए अधिक स्पष्ट होने के: आप श्रोताओं का ट्रैक रखने के addEventListener
और removeEventListener
ओवरराइड करने के लिए की जरूरत है ...
में कुछ तकनीकी जानकारी: मैं प्रविष्टि के लिए सुझाव है कि आप Dictionary
का उपयोग हैंडलर कार्यों स्टोर करने के लिए ... कुछ धीमा है, लेकिन बहुत तेजी से हटाने के लिए ... भी, Dictionary
कमजोर संदर्भ जो काफी महत्वपूर्ण है का समर्थन करता है, इवेंट हैंडलिंग के मामले में ... ध्यान रखें, useCapture
फिर ... दो बार एक ही हैंडलर जोड़ने के ...
अच्छी किस्मत की अनुमति देता है;)
बैक 2 डीओएस को इंगित करने के लिए धन्यवाद! – jdecuyper
ग्लेन सही है, निकालने के लिए कोई भी चीज़ नहीं है AllListener या listAllListener विधि। फिर भी, आप अपने custum diplayObject को IEventDispatcher इंटरफ़ेस को कार्यान्वित कर सकते हैं और अपने ऑब्जेक्ट से जोड़े गए या हटाए गए सभी श्रोताओं का ट्रैक रख सकते हैं।
back2dos दृष्टिकोण का उपयोग करना चाहिए उल्लेख किया है, क्या मैंने किया movieclip वर्ग का विस्तार था और कार्यों के सभी प्रकार लागू किया कि मैं दैनिक आधार पर उपयोग करता हूं लेकिन फिल्म क्लिप वर्ग का हिस्सा नहीं हूं। addEventListener वर्ग
protected var listeners : Dictionary = new Dictionary();
override public function addEventListener(type : String, listener : Function, useCapture : Boolean = false, priority : int = 0, useWeakReference : Boolean = true) : void
{
var key : Object = {type:type,useCapture:useCapture};
if(listeners[ key ]) {
removeEventListener(type, listeners[ key ], useCapture);
listeners[ key ] = null;
}
listeners[ key ] = listener;
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
protected function removeListeners() : void
{
try
{
for (var key:Object in listeners) {
removeEventListener(key.type, listeners[ key ], key.useCapture);
listeners[ key ] = null;
}
}catch(e:Error){}
}
... फ़ंक्शन पॉइंटर को शामिल किए बिना कुंजी में शामिल करने को छोड़कर इसका मतलब है कि आप ऑब्जेक्ट पर दिए गए प्रकार के केवल एक श्रोता को प्राप्त कर सकते हैं। एकाधिक श्रोताओं को अनुमति देने के लिए, मुख्य ऑब्जेक्ट में श्रोता फ़ंक्शन पॉइंटर जोड़ें और केवल उस कुंजी को कुछ डमी मान (उदा। 1) पर सेट करें। –
यह एक हैक की तरह है, लेकिन कुछ (शायद ज्यादातर मामलों) में, आप आसानी से शून्य पर है और यह फिर से प्रारंभ और फिर उसे पुन: कॉन्फ़िगर प्रदर्शन वस्तु निर्धारित कर सकते हैं के लिए ओवरराइड सहित शून्य दृश्य व्यवधान के साथ।
इसमें सभी ईवेंट श्रोताओं को हटाने का अतिरिक्त बोनस है।
जब तक आप इस ऐप में ऐसा नहीं कर रहे हैं जिसमें पहले से ही सैकड़ों श्रोताओं और ऑब्जेक्ट्स हैं तो इसे पूरी तरह ठीक काम करना चाहिए जब तक कि आप अपनी प्रदर्शन ऑब्जेक्ट को पुन: कॉन्फ़िगर कर सकें।
जाहिर है, आपको ऐसा कुछ भी नहीं करना चाहिए जो डेटा लोड करने जैसे निर्माता में पागल हो।
function a(){
mc.addEventListener(Event.ENTER_FRAME,function(){
...
}
}
function b(){
mc.removeEventListener(Event.ENTER_FRAME,function(){});
}
काम करता है ...
प्रश्न को और सावधानीपूर्वक पढ़ें। मैंने पूछा कि ऑब्जेक्ट से सभी ईवेंट श्रोताओं को कैसे हटाया जाए। – Soviut
मैं वास्तव में इस समस्या को हल करने के लिए केवल इस प्रश्न को देख रहा था। – andychase
यह काम नहीं करेगा - 'फ़ंक्शन बी' के भीतर बनाए गए अज्ञात ईवेंट हैंडलर फ़ंक्शन 'फ़ंक्शन ए' के भीतर बनाए गए अज्ञात ईवेंट हैंडलर फ़ंक्शन की तुलना में एक अलग ऑब्जेक्ट है। इसलिए, 'removeEventListener' कॉल चुपचाप विफल हो जाएगा। – ericsoco
- 1. सभी क्लिक ईवेंट हैंडलर को कैसे हटाएं?
- 2. एकाधिक ईवेंट श्रोताओं को एक तत्व
- 3. कन्स्ट्रक्टर में ईवेंट श्रोताओं को जोड़ना
- 4. Jquery तत्व के अंदर सभी ईवेंट हैंडलर को हटाएं
- 5. एक ईवेंट में सभी ईवेंट हैंडलर को हटाकर
- 6. सी # किसी दिए गए ईवेंट से सभी ईवेंट हैंडलर को कैसे सदस्यता रद्द करें?
- 7. SWING JComponents पर श्रोताओं को कैसे हटाएं
- 8. UITableView सेल में UIButton जैसे "ईवेंट हटाएं"
- 9. फ़ंक्शन कॉल पर ईवेंट श्रोताओं का उपयोग क्यों करें?
- 10. फ़ैक्टरी से ईवेंट को कैसे उत्सर्जित करें
- 11. माउसओवर पर लीफलेट पॉपअप हटाएं ईवेंट
- 12. जांचें कि ईवेंट में कोई श्रोताओं है या नहीं?
- 13. jQuery के UI टैब के लिए ईवेंट श्रोताओं?
- 14. jquery खाली() विधि गैर jquery माध्यमों के माध्यम से बनाए गए ईवेंट श्रोताओं को साफ़ करेगी
- 15. एक्शन स्क्रिप्ट: ऑब्जेक्ट को शून्य पर सेट करना, स्वचालित रूप से सभी संलग्न ईवेंट श्रोताओं को हटा दें?
- 16. क्या मुझे तत्वों को हटाने से पहले ईवेंट श्रोताओं को हटाने की आवश्यकता है?
- 17. ListBox.SelectedIndexChanged ईवेंट को कैसे रोकें?
- 18. NStimer ईवेंट को कैसे रोकें?
- 19. मैं सभी सेटटाइमआउट ईवेंट को कैसे अक्षम कर सकता हूं?
- 20. जावास्क्रिप्ट को ईवेंट हैंडलर
- 21. सभी <a> कैप्चरिंग ईवेंट
- 22. क्या ऑब्जेक्ट से अज्ञात ईवेंट श्रोताओं को हटाने का कोई तरीका है?
- 23. Jquery गतिशील रूप से जोड़े गए तत्वों के लिए ईवेंट श्रोताओं को जोड़ना
- 24. सभी ईवेंट सदस्यता साफ़ करें (क्लोन लिंक)
- 25. 2 एचटीएमएल तत्वों को स्वैप करें और उन पर ईवेंट श्रोताओं को संरक्षित करें
- 26. ViewPager onPageScrolled ईवेंट को
- 27. कैसे गिनना है कि कितने श्रोताओं को किसी ईवेंट में लगाया जाता है?
- 28. ईवेंट हैंडलर
- 29. वेक्टर से सभी एनए को कैसे हटाएं?
- 30. स्ट्रिंग से सभी वर्णों को कैसे हटाएं
मूल रूप से इस एक का एक शिकार, लॉग ऑन आज पहले: http://stackoverflow.com/questions/1452539/flash-as3-eventdispatcher-any-way-of-getting -ए-सूची-पंजीकृत-श्रोताओं – Glenn
लेकिन संक्षिप्त उत्तर यह है कि आपको हैश मानचित्र या कुछ का उपयोग करके अपना प्रबंधन करना होगा। – Glenn