Vabbeh ho risolto in una maniera un pò peciona... sotto un piccolo esempio su come risolvere la problematica:
codice:
var Pippo = Class.create({
listeners : [],
initialize : function(){
this.addListener(this.pippoide.bind(this), this);
},
addListener : function( func , obj ){
var responder = {};
responder.fnc = func
responder.handler = obj;
this.listeners.push(responder);
},
dispatch : function(){
this.listeners.each( function(responder){
responder.fnc.apply(responder, ['hello world']);
});
},
removeListener : function ( obj ){
var tmp = [] ;
this.listeners.each( function(e){
if(e.handler !== obj ){
tmp.push(e);
}
});
this.listeners = tmp;
},
start : function(){ alert('start fired'); this.dispatch(); },
pippoide : function(e){ alert('pippo say: '+e); }
});
var cA = Class.create({
name : 'mi chiamo pippo',
pippo : function(e){ alert(e+" - "+this.name); }
});
var obs = new Pippo();
var lst = new cA();
obs.addListener( lst.pippo.bind(lst), lst );
obs.start();
obs.removeListener(lst);
obs.start();