2013-11-20 1 views
5

मैं एक तरह से विश्व स्तर पर घटनाओं प्रेषण करने के लिए और जावास्क्रिप्ट या jQuery का उपयोग कर requireJS मॉड्यूल के अंदर देख रहा हूँ।वैश्विक स्तर पर और अंदर की आवश्यकताएँ जेएस ऑब्जेक्ट्स को कैसे प्रेषित करें?

मैं अपने js फ़ाइलों के भीतर कहने के लिए सक्षम होने के लिए करना चाहते हैं:

dispatchEvent(myCustomEventWithSomeData); 

और फिर अनुप्रयोग के किसी अन्य भाग में तो जैसे एक श्रोता जोड़ें:

addEventListener(“type Of Event”, executeThisFunction); 

यह संभव उपयोग कर रहा है jQuery? या किसी अन्य साधन? और क्या एक संभावित समाधान आवश्यकता जेएस मॉड्यूल के भीतर काम करेगा जो वैश्विक जावास्क्रिप्ट ऑब्जेक्ट्स नहीं हैं?

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

+0

मेरे लिए आपका प्रश्न http://stackoverflow.com/questions/9671995/javascript-custom-event-listener – twil

+0

यदि आप उदाहरणों का उपयोग कर रहे हैं तो एक पर्यवेक्षक पैटर्न का उपयोग करें। यदि आप सिंगलटन का उपयोग कर रहे हैं तो सामान्य घटनाओं – megawac

+0

धन्यवाद का उपयोग करने में कोई समस्या नहीं होनी चाहिए, क्या यह इस तरह jquery का उपयोग करके किया जा सकता है? $ (दस्तावेज़) .addEventListener ("myEvent", myEventHandler, false); ? – fasola81

उत्तर

4

हां, यह ऐसा कुछ है जो मैं आमतौर पर अपने स्वयं के अनुप्रयोगों में बहुत जल्दी सेटअप करता हूं। अब, आप अपने घटनाओं के साथ कैसे पेश बहुत क्या पुस्तकालय या तकनीक आप उपयोग करने का निर्णय पर निर्भर होने जा रहा है, लेकिन मूल अवधारणाओं ही रहेगा।

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

एक, आप अपने ईवेंट को आराम करने के लिए वैश्विक ऐप ऑब्जेक्ट की तरह कुछ बनाना चाहते हैं। कुल मिलाकर यह एक अच्छा अभ्यास है जब आपके जेएस कोड को मॉड्यूलर करना - आपको कुछ ऐसा करना चाहिए जो मॉड्यूल के बीच ब्रोकर के रूप में कार्य करता हो।

define(function() { 
    var App = {}; 
    return App; 
}); 

अब, इस मॉड्यूल कुछ है जो इसे पॉप्युलेट करने के लिए शुरू होता है में लोड किया जाना चाहिए: यह बहुत सादा और बुनियादी हो सकता है। आप थोड़ी देर के लिए ऐसा नहीं कर सकते हैं, लेकिन अंत में सर्कुलर निर्भरताएं आपको गधे में काटती हैं। इसलिए मैं इसे अपने "मुख्य" मॉड्यूल के समान कुछ भी शामिल करने की अनुशंसा करता हूं। वहां से, अपनी इवेंट सिस्टम शामिल करें और इसे ऐप में जोड़ें।

define(['app', 'events'], function(App, Events) { 
    App.events = new Events(); 
}); 

अब आपके पास एक अच्छा, हल्का ऑब्जेक्ट है जिसमें आप अन्य मॉड्यूल में शामिल कर सकते हैं जो समान ईवेंट ऑब्जेक्ट साझा करते हैं।

define(['app'], function(App) { 
    // User has clicked the sidebar 
    App.events.publish('sidebar.clicked'); // 
}); 

और, ओह मैं, पता नहीं है शायद पर क्लिक साइडबार एक डायनासोर, दिखाई तो अपने डायनासोर मॉड्यूल में, आप सुन था/निम्न कार्य करके सदस्यता के बनाता है: तो कहते हैं कि तुम एक साइडबार है सकते हैं:

define(['app'], function(App) { 
    App.events.subscribe('sidebar.clicked', showDinosaur); 
}); 

होने एक हल्के वस्तु आप मैंने पाया मॉड्यूल के बीच साझा कर सकते हैं एक सफल आधुनीकीकरण जे एस वास्तुकला की कुंजी है। मैं इसे अपनी खुद की परियोजनाओं में वैश्विक ऑब्जेक्ट स्टोर के रूप में उपयोग करता हूं, जो मेरी वेबस्केट मैसेजिंग परत के लिए एक कंटेनर है, और अन्य चीजें जिन्हें मैं प्रत्येक मॉड्यूल में स्पष्ट रूप से व्यक्तिगत रूप से शामिल करने की आवश्यकता नहीं चाहता हूं।

+0

वह बहुत ही खुशहाल था, धन्यवाद। – fasola81

+0

'ईवेंट' के साथ 'ऐप' को पॉप्युलेट करते समय, क्या आपको इसे परिभाषित करने के बजाय मॉड्यूल की आवश्यकता नहीं होगी? यदि आप इसे "मुख्य" मॉड्यूल के समान कुछ में परिभाषित करते हैं तो आपको "ऐप" मॉड्यूल के विपरीत हर जगह कहा गया "मुख्य" मॉड्यूल शामिल करना होगा, है ना? – Shrayas

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