Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Prototype] Creare una classe con pattern event/listener

    Salve,

    allora piccolo problema... Io ho una classe che, per vari motivi, deve prevedere la registrazione di listeners che possano rispondere ad alcuni eventi che la classe scatena..

    sostanzialmente questa classe ogni X secondi fa una richiesta Ajax ad un'altra pagina.. il risultato deve essere dispatchato tra vari listener perchè ognuno deve farci un'operazione diversa...

    Allora,

    per il listener avevo pensato un:

    codice:
    myClass.addListener('eventName', myObject.myFunction.blind(myObject));
    dove la funzione, blindata all'oggetto, viene salvata in un array e poi nel dispatch viene richiamata e gli viene passato tutto quello che deve essere

    e fin qui nessun problema, funziona tutto perfettamente.

    Il problema sorge nell' removeListener... ovvero non riesco a trovare un modo per riconoscere quale, tra i listener, eliminare

    un semplice array.without non funge..

    Idee?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  2. #2
    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();
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.