2009-06-30 5 views
1

Je pourrais coder ce que je veux réaliser comme ceci:Dans Flex, existe-t-il quelque chose comme une référence «this» pour un composant MXML?

<mx:Button id="someButton" click="doRememberButton(someButton)" ... /> 

mais je trouverais très utile (je mets ensemble une interface utilisateur assez grand) si je pouvais écrire:

<mx:Button click="doRememberButton(this)" ... /> 

Maintenant, le problème évident est que 'ceci' ne pointe pas vers le bouton, mais vers le composant principal défini par le fichier dans lequel le code est (par exemple VBox), mais ce serait une aide précieuse si j'avais une référence au 'courant' Composant MXML ..

Quelqu'un aurait-il une solution pour cela? Merci! Tom

Répondre

2

gestionnaires d'événements en ligne est vraiment code juste enveloppé, de sorte que vous pouvez utiliser l'objet événement pour obtenir des détails du répartiteur et d'autres informations sur les événements. Comme si:

<mx:Button click="trace(event.target)" /> 

Dans votre cas, vous devez changer la signature de votre gestionnaire d'événements, par exemple:

private function doRememberButton(event:Event):void 
{ 
    ... 
} 

Et dans le code MXML:

<mx:Button click="doRememberButton(event)" /> 

Le La propriété target de la classe d'événement est le répartiteur d'origine de l'événement. Il existe également une propriété currentTarget qui est la cible actuelle dans la chaîne d'événements. Cela concerne le bouillonnement d'événements. Il y a plus d'informations à ce sujet dans Adobe LiveDocs

+0

ou doRememberButton (event.target) ne nécessite pas de modifier votre code existant. – airportyh

1
private function doRememberButton(ev: Event) { 

//this gives your button 
ev.currentTarget; 


} 
1

ici est une solution plus précisément la façon dont u besoin

<mx:Button id="someButton" click="doRememberButton(event.currentTarget as Button)" /> 

à la fonction:

private function doRememberButton(thisBtn:Button):void 
{ 
    ... 
} 

c'est tout! :)

Questions connexes