Кто-либо может сказать мне различие между целью и currenttarget в гибком проводе?
Конечно, у меня тоже были проблемы с этим. Свойство currentTarget
- это IEventListener, для которого вы зарегистрировали обработчик события. target
- это тот, который диспетчеризировал событие, которое вы сейчас обрабатываете. Таким образом, currentTarget
меняется, а target
- нет.
Посмотрите следующий пример:
Sample App
<?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>
Output
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
Это простое дерево объектов отображения, и когда приложение готово, я:
Event.COMPLETE
. Поскольку все зарегистрировали обработчик события для этого же события, и поскольку я установил bubbles
в true (new Event(type, bubbles)
), все в дереве, от child до greatGrandParent и далее, что зарегистрировало обработчик события для Event.COMPLETE
, будет выполнять этот метод: completeHandler
. События перемещаются вверх по цепочке, а затем обратно вниз. target
- это тот, кто отправил событие, поэтому, поскольку child
отправил его, оно должно быть постоянным. currentTarget
- это то, что изменяется.
Это означает, что, скажем, вы хотите проверить, когда вы перелистываете DataGrid во Flex, вы хотите знать, когда вы перелистываете Checkbox внутри одного из itemRenderers в DataGrid. Один из способов - добавить на каждый чекбокс itemRenderer'а слушатель события MouseEvent.ROLL_OVER
. Другой способ - добавитьEventListener в сам DataGrid для MouseEvent.ROLL_OVER
, и проверить, что target является событием:
protected function dataGrid_rollOverHandler(event:MouseEvent):void
{
// event.currentTarget is DataGrid
if (event.target is CheckBox)
trace("rolled over checkbox!");
}
Вот как я часто использую event.target
.
Надеюсь, это поможет, Lance
Таким образом может помочь:
http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html # 219548
Вам стоит пройтись по туториалам на этом сайте: http://www.adobe.com/devnet/flex/videotraining/ для ознакомления с Flex, прежде чем задавать подобные вопросы. Ваш вопрос рассматривается в день 1.