Flex: Как прослушать событие в ItemRenderer - PullRequest
0 голосов
/ 02 апреля 2012

Я пытаюсь создать EventListener в ItemRenderer, но он не работает.Как прослушать событие внутри ItemRenderer?

---- В MainHomeView.mxml ----

<fx:Metadata>
    [Event(name="myEvent", type="flash.events.Event")]
</fx:Metadata>

protected function btnAdd_clickHandler(event:MouseEvent):void {       
    var eventObject:Event = new Event("myEvent", true, true);
    dispatchEvent(eventObject);       
}

---- В UserRenderer.mxml (ItemRenderer) --

protected function init(event:FlexEvent):void{ //run in CreationComplete
       addEventListener("myEvent", onHandleEvent);
      }

 protected function onHandleEvent():void  {
        trace("Event received");
      }

Ответы [ 2 ]

0 голосов
/ 10 апреля 2012

Это может быть немного поздно, но, согласно вашему примеру, ваш ItemRenderer слушает сам себя - вот почему вы никогда не получите событие.А что касается пузырей, помните, что как на этапе цели, так и на этапе захвата все начинается со стадии и продолжается вплоть до отправки цели, а затем возвращается обратно.Так как ваш рендерер является дочерним по списку, он никогда не получит это событие.

Если вы хотите, чтобы IR получил событие из списка, вам понадобится ссылка на список - обычно владелец .В этом случае это owner.addEventListener ().Вы также можете посмотреть на ListData , который назначен каждому визуализатору, и в этом составном объекте есть ссылка на список.

Прямо из документации:

Цель события служит координационным центром для того, как события проходят через иерархию списка отображения.При возникновении такого события, как щелчок мыши или нажатие клавиши, Flash Player или приложение AIR отправляет объект события в поток событий из корня списка отображения.Затем объект события проходит через список отображения, пока не достигнет цели события, после чего он начинает свое обратное путешествие по списку отображения.Это путешествие туда и обратно к цели события концептуально разделено на три фазы: фаза захвата включает в себя путь от корня до последнего узла перед узлом цели события, целевая фаза включает в себя только целевой узел события, а фаза пузырьков состоит излюбые последующие узлы, встречающиеся в обратном пути к корню списка отображения

Вам необходимо быть осторожным с этим, поскольку ItemRenderer является частью метода создания ClassFactory каждый рендереру будет назначен этот слушатель - это может или не может быть тем, что вы хотите.

0 голосов
/ 03 апреля 2012

У меня есть Google, и я нашел решение в gskinner .Но используя этот метод, каждый элемент в ItemRenderer получит событие, поэтому, если у вас есть 100 элементов (в вашем ItemRenderer), вы будете записывать 100 событий.

...