Каково различие между целью и currenttarget в гибком проводе?

Кто-либо может сказать мне различие между целью и currenttarget в гибком проводе?

9
задан Paul Sweatte 30 May 2012 в 06:07
поделиться

3 ответа

Конечно, у меня тоже были проблемы с этим. Свойство 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

Это простое дерево объектов отображения, и когда приложение готово, я:

  1. Добавляю слушателей одного и того же события на каждый компонент в дереве.
  2. Отправляю произвольное событие (просто для демонстрации). Я выбрал 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

18
ответ дан 3 November 2019 в 01:55
поделиться
1
ответ дан 3 November 2019 в 01:55
поделиться

Вам стоит пройтись по туториалам на этом сайте: http://www.adobe.com/devnet/flex/videotraining/ для ознакомления с Flex, прежде чем задавать подобные вопросы. Ваш вопрос рассматривается в день 1.

-9
ответ дан 3 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: