2009-09-14 23 views
6

मैं this question पर एक अद्यतन उत्तर की तलाश में हूं।अपडेट: प्रोटोटाइप में डीओएम नोड पर इवेंट श्रोताओं को कैसे ढूंढें?

ऐसा लगता है कि प्रोटोटाइप 1.6+ में Event.observers का उपयोग अब (स्मृति मेमोरी लीक से बचने के लिए नहीं किया जाता है), तो मैं अब कैसे ट्रैक करूं कि किसी ईवेंट से कौन सा ईवेंट श्रोताओं जुड़े हुए हैं?

मुझे पता है कि फायरबग में "अगले पर ब्रेक" बटन है, लेकिन शरीर के तत्व पर कई माउस श्रोताओं हैं जो मैं किसी अन्य विशेष तत्व पर व्यवहार करने के लिए निष्पादित करने से पहले निष्पादित कर सकता हूं, तो क्या कोई और तरीका है?

उत्तर

7

मैं और अधिक व्यापक Prototype कवरेज संस्करणों 1.6.1 को 1.6.0 में परिवर्तन के लिए लेखांकन के साथ जवाब you linked to अद्यतन है।

यह वहाँ के बीच में बहुत गंदा है, लेकिन 1.6.1 कुछ हद तक साफ है:

var handler = function() { alert('clicked!') }; 
$(element).observe('click', handler); 

// inspect 
var clickEvents = element.getStorage().get('prototype_event_registry').get('click'); 
clickEvents.each(function(wrapper){ 
    alert(wrapper.handler) // alerts "function() { alert('clicked!') }" 
}) 
+0

Thx भी! मुझे यकीन है कि यह उन लोगों की मदद करेगा जिन्होंने इसे Google के माध्यम से किया था। –

6

हालात अब तत्व भंडारण के माध्यम से रूट किया जाता है:)

Element.getStorage(yourElement).get('prototype_event_registry') आप प्रोटोटाइप के Hash का एक उदाहरण दे देंगे, तो आप कुछ भी है कि आप हैश के साथ क्या करना होगा कर सकते हैं।

// to see which event types are being observed 
Element.getStorage(yourElement).get('prototype_event_registry').keys(); 

// to get array of handlers for particular event type 
Element.getStorage(yourElement).get('prototype_event_registry').get('click'); 

// to get array of all handlers 
Element.getStorage(yourElement).get('prototype_event_registry').values(); 

// etc. 

ध्यान दें कि इन गैर-दस्तावेजी आंतरिक विवरण जो भविष्य में बदला जा सकता है, तो मैं के लिए, शायद, डीबगिंग उद्देश्यों को छोड़कर उन पर भरोसा नहीं होता।

+0

+1 Thx, kangax। यद्यपि आप पहले थे, क्रेशेंटफिश ने 1.6.0.एक्स संस्करण के साथ एक और पूर्ण उत्तर दिया जो मुझे चाहिए था। अन्य उत्तर को अपडेट करने के लिए –