actionscript 3 - ¿Cuál es la diferencia entre target y currenttarget en flex?
actionscript-3 event-handling (3)
¿Puede alguien decirme la diferencia entre target y currenttarget en flex?
Debería ir a través de tutoriales en este sitio: http://www.adobe.com/devnet/flex/videotraining/ para obtener una introducción a Flex antes de hacer una pregunta como esta. Su pregunta está cubierta el día 1.
Por lo tanto, podría ayudar:
http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html#219548
Claro, también he tenido algunos problemas con esto. La propiedad actualTarget es IEventListener donde ha registrado el controlador de eventos. El target
es el que envió el evento que está manejando actualmente. Entonces, el currentTarget
cambia, el target
no.
Mira el siguiente ejemplo:
Aplicación de muestra
<?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>
Salida
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
Es un árbol simple de objetos de visualización, y cuando la aplicación está lista I:
- Agregue detectores para el mismo evento en cada componente del árbol.
- Envíe un evento arbitrario (solo para demostración). Elegí
Event.COMPLETE
.
Como todo ha registrado un manejador de eventos para ese mismo evento, y como he configurado las bubbles
en verdadero ( new Event(type, bubbles)
), cualquier cosa en el árbol, desde niño hasta granGrandParent y más allá, que ha registrado un controlador de Event.COMPLETE
para Event.COMPLETE
, ejecutará ese método: completeHandler
. Los eventos viajan por la cadena y vuelven a bajar. El target
es el que envió el evento, por lo que desde que el child
envió, debe ser constante. El currentTarget
es lo que cambia.
Esto significa que, por ejemplo, si desea verificar cuándo está pasando por un DataGrid en Flex, quiere saber cuándo pasar una casilla de verificación dentro de uno de los itemRenderers en el DataGrid. Una forma es agregar EventListener en cada checkbox de ItemRenderer para MouseEvent.ROLL_OVER
. Otra forma es agregar EventListener al DataGrid en sí mismo para MouseEvent.ROLL_OVER
y verificar cuál es el objetivo en el evento:
protected function dataGrid_rollOverHandler(event:MouseEvent):void
{
// event.currentTarget is DataGrid
if (event.target is CheckBox)
trace("rolled over checkbox!");
}
Así es como a menudo uso event.target
.
Espero que ayude, Lance