Estoy implementando el patrón del módulo, y me gustaría saber la mejor/preferida forma de definir y registrar escuchas/manejadores de eventos. La siguiente obra, pero tal vez hay una manera mejor/más simple ...Módulo Javascript Eventos y Escuchas
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");
Pruébelo:
Parece que una gran cantidad de trabajo para tener myEventx, myEventHandlerx y addListener ?
Cuando se llama 'addListener()', no es que la creación de '' myEvent1Handler' o myEvent2Handler' como _GLOBAL_ las variables que hacen referencia al parámetro 'func' aprobada en? No establecerá las propiedades del mismo nombre ya definidas en su objeto a menos que diga 'this.myEvent1Handler = ...' - y luego 'this.myEvent1Handler()' en su función 'myEvent1'. (O 'MODULE.myEvent1Handler' como que tiene' MODULE.myEvent1() 'en' method1'.) – nnnnnn
¿Qué problema está tratando de resolver en realidad? Esto parece una gran sobrecarga que en realidad no hace más que construir un andamio. Tal vez si supiéramos lo que en realidad está tratando de lograr, podríamos ayudarlo a encontrar la mejor manera de hacerlo. – jfriend00
Gracias ... Quiero eventos en MODULE, para que un usuario de MODULE pueda engancharse en eventos. Los métodos de MODULE tendrán solicitudes asincrónicas (usando jquery) así que quiero usar eventos para indicar cuándo se ha completado una solicitud asincrónica. – ZimSystem