Javascript Module Pattern Events und Listener

Ich bin der Implementierung des module-Muster, und würde gerne wissen, der beste/bevorzugte Methode zum definieren und registrieren Sie Ereignis-Listener/handlers. Das folgende funktioniert, aber vielleicht gibt es eine bessere/einfachere Möglichkeit...

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");  

Probieren Sie es aus:

http://jsfiddle.net/RqusH/3/

Scheint wie eine Menge Arbeit zu haben myEventx, myEventHandlerx, und addListener?

  • Wenn Sie anrufen addListener(), ist nicht, dass die Schaffung myEvent1Handler oder myEvent2Handler als Globale Variablen verweisen auf die func parameter übergeben? Es wird nicht die Einstellung der Eigenschaften mit dem gleichen Namen bereits definiert in Ihrem Objekt, es sei denn, Sie sagen this.myEvent1Handler = ... - und dann this.myEvent1Handler() in Ihrem myEvent1 Funktion. (Oder MODULE.myEvent1Handler wie Sie MODULE.myEvent1() im method1.)
  • Was für ein problem du eigentlich zu lösen versucht? Dies scheint wie eine Menge Aufwand, der nicht wirklich etwas tun, aber stellen Sie ein Gerüst. Vielleicht, wenn wir wüssten, was Sie eigentlich erreichen wollen, wir könnten Ihnen helfen, den besten Weg finden, das zu tun.
  • Danke... ich will die Vielseitigkeit in-MODUL, so dass ein Benutzer des MODULS können die Haken in die Ereignisse. MODUL Methoden die async-requests (mit jquery), so will ich, um Ereignisse zu deuten, wenn ein async-request abgeschlossen ist.
InformationsquelleAutor Zim | 2011-11-11
Schreibe einen Kommentar