Flex4 List ItemRenderer дети и события - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть средство визуализации элементов, которое я использую в списке.В средстве визуализации элементов есть CheckBox и ColorPicker.Я создал свои собственные классы событий для этих двух элементов, и они не создают пузыри своих событий.

Вы также можете щелкнуть элемент в списке, у меня есть 3 прослушивателя, прикрепленных к списку, я не хочукак это сделать при обработке обработчика элемента списка при щелчке дочерних элементов списка?

Извлечь ниже:

     protected function updateList():void
  {
   var proxy:ApplicationDataProxy = ApplicationDataProxy(facade.retrieveProxy(ApplicationDataProxy.NAME));
   list.addEventListener(CustomColorEvent.UPDATED_COLOR, colorClickHandler);
   list.addEventListener(CustomMenuEvent.CHECK_CLICKED, checkClickHandler);
   list.addEventListener(MouseEvent.CLICK, clickHandler);
   list.itemRenderer = new ClassFactory(FlightItemRenderer);
   list.dataProvider = proxy.flightsList;
  }

  protected function colorClickHandler(event:CustomColorEvent):void
  {
   sendNotification(ApplicationFacade.UPDATE_COLOR, {id:event.data, color:event.color});
  }

  protected function checkClickHandler(event:CustomMenuEvent):void
  {
   sendNotification(ApplicationFacade.SHOW_FLIGHT, {id:event.data, visible:event.visible});
  }

  protected function clickHandler(event:Event):void
  {
   // also gets fired from colours and checkbox, BUT I DON'T WANT IT TO!!!
  }

1 Ответ

1 голос
/ 26 ноября 2010

Добавьте прослушиватель кликов к вашему средству визуализации элементов и проверьте свойство event.target, чтобы увидеть, был ли установлен флажок, если это так, вы можете вызвать event.stopImmediatePropagation () .Вот очень простой пример, никакие другие слушатели MouseEvent.CLICK не будут запущены.

<s:List>
    <s:itemRenderer>
        <fx:Component>
            <s:CheckBox click="checkbox1_clickHandler(event)" />
                <fx:Script>
                    <![CDATA[
                        protected function checkbox1_clickHandler(event:MouseEvent):void
                        {
                            //You could also add this click listener
                            //to the renderer itself if you need to do
                            //something when the checkbox is clicked
                            event.stopImmediatePropagation();
                        }
                    ]]>
                </fx:Script>
        </fx:Component>
    </s:itemRenderer>
</s:List>
...