2009-02-09 8 views
12

In un'app FLEX, sto tentando di "ri-inviare" un evento personalizzato. Cioè componente1 fa dispatchEvnet (evento), componente2 registra un gestore per l'evento, l'unica funzione del gestore è, di nuovo, dispatch (evento). Infine, component3 ascolta l'evento che esce dal componente2. Quello che sto cercando di fare è simile al concetto di "re-lancio" delle eccezioni (e per ragioni simili). La differenza è che il ri-dispacciamento non sembra funzionare in AS3 (Flash 10). In IE, non succede nulla, e in FF3 c'è un'eccezione che dice che il cast di tipo fallisce mentre si tenta di forzare il tipo Event al mio CustomEvent mentre si chiama il gestore in component3. Il codice di tracciamento nel debugger mostra che quando viene chiamato component3, l'evento è, in effetti, generico, con tutte le mie cose personalizzate perse. Questo dovrebbe essere il caso?Evento di reinvio in FLEX

risposta

19

Il problema riscontrato è causato dall'impossibilità di ignorare l'evento clone() nell'evento personalizzato.

Quando gli eventi vengono ridistribuiti, vengono clonati e modificati. Se non si esegue l'override di clone() si ottiene l'implementazione di base di clone(), che restituisce un evento. Poiché l'evento non può essere trasmesso al tipo di evento personalizzato, viene generato un errore di runtime.

Dalla documentazione:

Quando si crea una classe Event personalizzata, è necessario eseguire l'override del metodo ereditato Event.clone() in modo che esso per duplicare le proprietà della classe personalizzata. Se non si impostano tutte le proprietà aggiunte nella sottoclasse dell'evento, tali proprietà non avranno i valori corretti quando gli ascoltatori gestiscono l'evento redispatch. più