Nello sviluppo di applicazioni Flash in AS3 è spesso necessario lo scambio di dati fra classi morfologicamente differenti.
Questo scambio normalmente avviene durante una determinata azione (il click su un bottone, il caricamento di un'immagine, ecc) ed è enormemente facilitato dagli eventi messi a disposizione dal pacchetto flash.events.
Tuttavia i suddetti eventi hanno un ruolo molto specifico e se volessimo usarli per scopi differenti dovremmo scendere a patti con i parametri da essi incapsulati.
L'alternativa (o piuttosto la giusta via da seguire) è creare un evento che si adatti ai nostri scopi, e lo faremo estendendo la classe base Event:
package com. events{
import flash.events.Event;
public class MyEvent extends Event {
public static const ACTION:String="action";
public var obj:Object;
public function MyEvent(type:String, o:Object=null):void {
super(type,false,false);
obj=o;
}
override public function clone():Event{
return new MyEvent(type,obj);
}
}
}
Ora passiamo usare il nostro personale evento per inviare qualsiasi tipologia di dato, incapsulandolo nell'oggetto obj offerto da MyEvent.
var evt:MyEvent=new MyEvent(MyEvent.ACTION,{nome:"Marco",cognome:"Rossi",eta:35,altro:[]});
dispatchEvent(evt);
La classe ascoltatrice, nel momento in cui si verificherà l'evento MyEvent.ACTION, potrà ottenere i dati contenuti in obj.
package{
import flash.display.*;
import com.events.*;
public class MyClass extends EventDispatcher{
public function MyClass():void{
addEventListener(MyEvent.ACTION,onAction);
}
private function onAction(e:MyEvent):void{
for(var s:String in e.obj){
trace(s+": "+e.obj[s]);
}
}
}
}







