Domanda

Non ho tale problema: Ho 2 componenti personalizzati, che hanno la loro propria gerarchia di nidificazione ... Uno è il contenitore per un altro. Devo "di farli familiarizzare" con l'altro. Il modo in cui sto cercando di ottenere che utilizza eventi globali (un lato è sparare e l'altro sta recuperando):

Application.application.addEventListener("Hello", function (data:Event):void{
        // .. some actions
    });

//and
Application.application.dispatchEvent(new Event(Hello));

Tutto è abbastanza buono, ma c'è un coso .. quando sto cercando di catturare l'evento, non posso accedere alla classe, che sta recuperando esso. Per esempio:.

  1. Container genera l'evento.
  2. Bambino caughts esso.
  3. Quindi dovrebbe essere creato il collegamento tra contenitore e del bambino.

MA, l'unica cosa che potevo acheive sta passando un riferimento al contenitore nel DynamicEvent. C'è qualche possibilità che io possa accedere al bambino al funzione di gestore di eventi. O forse non c'è modo più elegante per risolvere questo problema ...

Qualsiasi aiuto sarebbe greately apprezzato:)

È stato utile?

Soluzione

Nella maggior parte dei casi, sia di destinazione o currentTarget ti darà accesso al componente che è sparare l'evento.

http://livedocs.adobe.com/flex /3/langref/flash/events/Event.html http://livedocs.adobe.com/flex/ 3 / langref / flash / eventi / Event.html # currentTarget http://livedocs.adobe.com/flex/ 3 / langref / flash / eventi / Event.html # bersaglio

Tuttavia, con il suo approccio, si sparano l'evento dall'applicazione livello superiore; Non da uno dei componenti nidificati. Questo mi sembra insolito.

I immaginare di avere una gerarchia simile a questo:

Application

--- Container1

------- container2

mi sento di raccomandare a sparare l'evento da container2 e di ascolto per essa in container1.

Il codice di spedizione, in container2 sarà qualcosa di simile a questo:

this.dispatchEvent(new Event('myCustomEvent'));

In Container1 è possibile ascoltare per la qualcosa evento come questo:

container2.addEventListener('myCustomEvent', onMyCustomEvent);

Se si ha bisogno di aggiungere i dati degli eventi personalizzati per il vostro evento; è possibile creare i propri dati di classe evento personalizzato e ADD. Avete un caso d'uso specifica per la cottura gli eventi fuori dal contenitore di applicazioni? Mi piacerebbe sentirla.

Altri suggerimenti

Abbiamo fatto come dice Flextras, creare eventi personalizzati, nel nostro caso gli eventi Cairngorm, e in realtà i dati aggiunti, un riferimento al contenitore si desidera che il risponditore evento rispondere. Non ho davvero come farlo in questo modo anche se, come in occasioni molto rare contenitore potrebbe non essere in uno stato in cui può essere interagito con. Nel nostro caso abbiamo un sacco di moduli caricati dinamicamente in grado di andare e venire, e poi Wham! Improvvisamente si ottiene l'equivalente flessione di un'eccezione puntatore nullo. Ma questo è il prezzo da pagare quando si è fortemente asincrono, un sacco di controllo nullo e la cattura di eccezioni.

Il tipo di gestione degli eventi che stai cercando è ben risolto con un quadro di dipendenza-iniezione come Mate Swiz . In sostanza, si sta bisogno di eventi di cattura a livello globale, e quindi eseguire diverse azioni in tutta l'applicazione in vari componenti su tali eventi.

Mate ha il concetto di un EventMap che consente di mappare determinati eventi per interagire con le vostre opinioni in modo diverso. È possibile iniettare valori in proprietà della vista o metodi di chiamata all'interno di una vista quando certi eventi accadono.

Se non si vuole andare con un quadro, sguardo al bolle proprietà della classe Event. Quando si modifica la classe Event per creare un evento personalizzato, impostare il valore predefinito di bolle a true . In questo modo, gli eventi continuerà a bollire fino a l'applicazione principale, indipendentemente da quanto profondamente si sono annidati nella propria applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top