मैं मॉड्यूल पैटर्न को कार्यान्वित कर रहा हूं, और ईवेंट श्रोताओं/हैंडलरों को परिभाषित और पंजीकृत करने के लिए सबसे अच्छा/पसंदीदा तरीका जानना चाहता हूं। काम करता है निम्नलिखित, लेकिन शायद ही कोई बेहतर/आसान तरीका है ...जावास्क्रिप्ट मॉड्यूल पैटर्न घटनाक्रम और श्रोताओं
var MODULE = function() {
// private
var _field1;
var _field2;
function localFunc(p) {
alert('localFunc');
}
// public
return {
// properties
prop1: _field1,
// events
myEvent1Handler: {},
myEvent1: function() {myEvent1Handler();},
myEvent2Handler: {},
myEvent2: function() {myEvent2Handler();},
addListener: function (event,func) {
if (event == "myEvent1")
myEvent1Handler = func;
if (event == "myEvent2")
myEvent2Handler = func;
},
// public methods
method1: function (p) {
alert('method1 says:' + p);
MODULE.myEvent1();
},
method2: function (p) {
alert('method2 doing stuff');
localFunc(p);
MODULE.myEvent2();
}
};
}();
// register for events
MODULE.addListener("myEvent1",function(){alert('fired1');});
MODULE.addListener("myEvent2",function(){alert('fired2');});
// use module (only event1 should fire!)
MODULE.method1("hello");
इसे आजमाएं:
बहुत काम की तरह लगता है myEventx, myEventHandlerx, और addListener के लिए ?
जब आप फोन 'addListener()', बनाने 'myEvent1Handler' या' myEvent2Handler' _global_ चर 'func' पैरामीटर संदर्भित में पारित के रूप में है कि नहीं है? यह आपके ऑब्जेक्ट में पहले से परिभाषित उसी नाम के गुणों को सेट नहीं करेगा जबतक कि आप 'this.myEvent1Handler = ...' - और फिर 'my.myEvent1 हैंडलर()' को अपने 'myEvent1' फ़ंक्शन में' कहते हैं। (या 'MODULE.myEvent1 हैंडलर 'जैसे कि' method1' में आपके पास 'MODULE.myEvent1()' है।) – nnnnnn
वास्तव में आप किस समस्या को हल करने की कोशिश कर रहे हैं? ऐसा लगता है कि बहुत सारे ओवरहेड हैं जो वास्तव में कुछ भी नहीं करते हैं बल्कि मचान बनाते हैं। शायद अगर हम जानते थे कि आप वास्तव में क्या करने की कोशिश कर रहे थे, तो हम आपको ऐसा करने का सबसे अच्छा तरीका खोजने में मदद कर सकते हैं। – jfriend00
धन्यवाद ... मैं मॉड्यूल में ईवेंट करना चाहता हूं, ताकि मॉड्यूल का उपयोगकर्ता ईवेंट में शामिल हो सके। मॉड्यूल विधियों में एसिंक अनुरोध (jquery का उपयोग करके) होगा, इसलिए मैं ईवेंट का उपयोग करना चाहता हूं ताकि यह इंगित किया जा सके कि एक async अनुरोध कब पूरा हो गया है। – ZimSystem