2012-09-23 13 views
8

कहें कि मैं अपना स्वयं का मॉड्यूल बना रहा हूं, जो 'नेट' मॉड्यूल के शीर्ष पर बैठता है।node.js में, मॉड्यूल की सभी घटनाओं को आगे कैसे

mymod.on('myevent',...); // my event 
mymod.on('connect',...); // net event 
mymod.on('end',...);  // net event 

अभी मैं निम्नलिखित

... 
tcp.on('connect',function(){ self.emit('connect');}); 
tcp.on('end',function(){ self.emit('end');}); 
... 

कर रहा हूँ वहाँ एक और अधिक मुहावरेदार रास्ता नहीं है: मेरी मॉड्यूल अपनी ही घटनाओं ग्राहकों को नेटवर्क घटनाओं TCP कनेक्शन द्वारा उत्सर्जित पर सुनने है, लेकिन यह भी अनुमति देता है मेरे द्वारा एक मॉड्यूल से अन्य मॉड्यूल के ग्राहकों को बस सभी घटनाओं (या घटनाओं का एक सबसेट) को आगे बढ़ाने के लिए?

मुझे उम्मीद है कि इस तरह का परिदृश्य हर समय आता है, इसलिए मैं इसे सबसे साफ तरीके से करना चाहता हूं।

उत्तर

2

जो मैंने पहले किया है वह handle the newListener event है। जब तक कि मेरी कक्षा से जुड़ा न हो, मैं हैंडलर को जोड़ने से परेशान नहीं हूं। फिर, जब यह है, मैं इसे बेस क्लास में संलग्न करता हूं।

this.on('newListener', function (event, listener) { 
    baseClassInstance.on(event, listener); 
}) 

आप फ़िल्टर कर सकते हैं जो घटनाओं पहले event पैरामीटर की जाँच करके के माध्यम से पारित कर रहे हैं।

सावधान रहें यदि आपको श्रोताओं को हटाना है। यह उन मामलों में सबसे अच्छा समाधान नहीं हो सकता है।

+0

ऐसा लगता है कि यह v0.10 में एक 'removeListener' ईवेंट होगा (https://github.com/joyent/node/pull/3806) –

0

मैंने कभी कोशिश नहीं की है और इस समय इसका परीक्षण नहीं कर सकता लेकिन आप निम्न कोशिश कर सकते हैं;

प्रॉक्सी किसी अन्य वस्तु के लिए सभी घटनाओं

tcp.emit = mymod.emit.bind(mymod); 

प्रॉक्सी घटनाओं और अपने स्वयं के कहते हैं;

var oldEmit = tcp.emit; 

tcp.emit = function() { 
    mymod.emit.apply(mymod, arguments); 
    return oldEmit.apply(this, arguments); 
} 

मुझे बताएं कि यह काम करता है! उपर्युक्त अवधारणा का प्रमाण है और मैंने ऐसा करने के दुष्प्रभावों में कोई विचार नहीं किया है।

+0

इसका मतलब यह होगा कि घटनाओं को सुनने के लिए अन्य मॉड्यूल 'टीसीपी' सामान्य रूप से उत्सर्जित नहीं होंगे, उनके हैंडलर को बुलाया नहीं जाएगा। –

+0

सही है अगर इसे अन्य हैंडलरों के लिए भी उपलब्ध होना आवश्यक है, तो मैंने कोड अपडेट किया है। किसी भी तरह से यह किसी भी तरह से सुझाया गया उपयोग केवल अवधारणा का प्रमाण नहीं है –

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