2010-06-29 6 views
1

J'ai une application flexible, l'affichage de cette application est construit avec de nombreux conteneurs. J'ai un FlexEvent.UPDATE_COMPLETE sur chacun des objets displayObjects.Contrôle des événements dans flex as3 (ordre des événements)

Que dois-je accomplir? Je veux gérer l'événement uniquement au niveau supérieur où il s'est produit, par exemple, si j'ai une grille et que la mise à jour s'est produite dans une étiquette quelque part à l'intérieur, je veux gérer l'événement uniquement sur la grille.

Y at-il un moyen d'accomplir cela?

juste pour souligner, je n'ai aucune connaissance des objets d'affichage au moment de la compilation, seulement à l'exécution, l'affichage est construit dynamiquement à je ne peux pas écrire le code sur la grille, je dois vérifier en quelque sorte si l'événement s'est produit à un niveau supérieur.

J'aimerais beaucoup de l'aide avec ce problème, même si ce n'est pas le code mais le concept de la façon de gérer ce problème unique.

Merci

Répondre

0

Avez-vous envisagé stopPropagation()/stopImmediatePropagation() sur l'événement, une fois que vous gérez cet événement.

Exemple: Depuis votre bouton est dans la toile. Votre méthode de gestionnaire d'événements en toile ressemblerait à ceci,

function handleEvent(e:FlexEvent):void { 
trace("In Canvas's handler"); 
//do your events... 
e.stopPropagation(); //This stops from propagating e to its parent containers, which is an HBOX. The container can be anything at runtime, it doesnt affect the propagation. 

} 

Essayez le même exemple dans vos autres conteneurs aussi.

Quelques exemples ici,

http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html

http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html#stopPropagation%28%29

+0

Je suis ware de ceux-ci, comment peuvent-ils m'aider ici? Je vais donner un exemple, j'ai un bouton, il est contenu dans une toile et cette toile est dans une HBOX (encore une fois, je n'ai pas cette connaissance à la compilation, seulement en exécution) une fois que l'événement est tiré, il se déclenchera sur le bouton et sur la toile mais pas sur le HBox, je veux gérer cet événement une seule fois, sur le canevas. – KensoDev

+0

Edité ma réponse, le problème est juste d'arrêter la propagation de l'événement. – prem

+0

les parents pourraient se fier à l'événement updateComplete de l'enfant - cela pourrait casser quelque chose ... il faut vérifier le cycle de vie de l'instanciation du composant Flex pour le confirmer. – Amarghosh

0

Juste pour vérifier l'event.target et ignorer si ce n'est pas ce que vous cherchez. Ou encore mieux: écoutez les événements sur les composants de niveau supérieur et ignorez si target et currentTarget ne correspondent pas.

if(event.target != event.currentTarget) 
    return; 

Si vous ne pouvez pas le faire non plus, vérifiez que les parents: si le parent est votre application ou le conteneur qui contient les éléments de haut niveau, il est un élément de niveau supérieur. Basé sur la structure de votre composant, il peut être quelque chose comme

if(event.target.parent == this) 
//or 
if(event.target.parent == this.theContainer_thatHolds_topLevelItems) 
//or 
if(event.target.parent is Application) 
//or 
if(event.target.parent is CustomContainerClassName) 
Questions connexes