Quelqu'un peut-il s'il vous plaît me dire la différence entre cible et currenttarget en flex?Quelle est la différence entre target et currenttarget dans flex?
Répondre
Bien sûr, j'ai eu quelques problèmes avec cela aussi. La propriété currentTarget
est le IEventListener pour lequel vous avez enregistré le gestionnaire d'événements. Le target
est celui qui a distribué l'événement que vous gérez actuellement. Donc, les changements currentTarget
, le target
ne fait pas.
Découvrez l'exemple suivant:
App échantillon
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="addListeners()">
<mx:Script>
<![CDATA[
protected function addListeners():void
{
greatGrandParent.addEventListener(Event.COMPLETE, completeHandler);
grandParent.addEventListener(Event.COMPLETE, completeHandler);
aParent.addEventListener(Event.COMPLETE, completeHandler);
child.addEventListener(Event.COMPLETE, completeHandler);
// dispatch event that "bubbles", second param is "true"
// dispatched from child
child.dispatchEvent(new Event(Event.COMPLETE, true));
}
protected function completeHandler(event:Event):void
{
trace("target: ", event.target + ", currentTarget: ", event.currentTarget);
}
]]>
</mx:Script>
<mx:Panel id="greatGrandParent">
<mx:Panel id="grandParent">
<mx:Panel id="aParent">
<mx:Button id="child"/>
</mx:Panel>
</mx:Panel>
</mx:Panel>
</mx:Application>
Sortie
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent.aParent.child
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent.aParent
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent
C'est un arbre simple des objets d'affichage, et lorsque l'application est prêt, je :
- Ajoutez des écouteurs pour le même événement sur chaque composant de l'arborescence.
- Envoie un événement arbitraire (juste pour la démonstration). J'ai choisi
Event.COMPLETE
.
Puisque tout a enregistré une eventHandler pour ce même événement, et comme je l'ai mis bubbles
true (new Event(type, bubbles)
), quoi que ce soit dans l'arbre, de l'enfant à greatGrandParent et au-delà, qui a enregistré un gestionnaire d'événements pour Event.COMPLETE
, exécutera cette méthode: completeHandler
. Les événements remontent la chaîne puis redescendent. Le target
est celui qui a envoyé l'événement, donc depuis child
l'a envoyé, il devrait être constant. Le currentTarget
est ce qui change. Cela signifie que, par exemple, si vous voulez vérifier quand vous faites un survol d'un DataGrid dans Flex, vous voulez savoir quand vous survolez une Checkbox dans l'un des itemRenderers dans le DataGrid. Une façon consiste à ajouter EventListener sur chaque case de itemRenderer pour MouseEvent.ROLL_OVER
. Une autre façon est de addEventListener au DataGrid lui-même pour MouseEvent.ROLL_OVER
et vérifier ce que l'cible est sur l'événement:
protected function dataGrid_rollOverHandler(event:MouseEvent):void
{
// event.currentTarget is DataGrid
if (event.target is CheckBox)
trace("rolled over checkbox!");
}
Voilà comment j'utilise souvent event.target
.
espoir qui aide, Lance
pourrait ainsi aider:
http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html#219548
Vous devez passer par des tutoriels sur ce site: http://www.adobe.com/devnet/flex/videotraining/ pour une introduction à Flex avant de poser une question comme ça. Votre question est traitée le jour 1.