2010-11-25 7 views
0

Ich habe einen benutzerdefinierten Elementrenderer, der in einer Liste verwendet. Im Elementrenderer gibt es eine CheckBox und einen ColorPicker. Ich habe meine eigenen benutzerdefinierten Ereignisklassen für diese beiden Elemente erstellt und sie sprudeln ihre Ereignisse nicht.Flex4 List ItemRenderer Kinder und Ereignisse

Sie können auch auf das Element in der Liste klicken, ich habe 3 Listener an die Liste angehängt, ich möchte nicht, dass der Listenelementhandler ausgelöst wird, wenn Kinder der Liste angeklickt werden, wie mache ich das?

Ausschnitt unten:

 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!!! 
    } 

Antwort

1

hinzufügen klicken Zuhörer auf Ihre Elementrenderers und überprüfen Sie die event.target Eigenschaft, um zu sehen, ob es die Checkbox war, der auf geklickt wurde, wenn es Sie ist event.stopImmediatePropagation() aufrufen können. Hier ist ein sehr einfaches Beispiel, keine anderen Listener für MouseEvent.CLICK werden ausgelöst.

<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> 
+0

Danke für die Antwort, genau das, was ich gesucht habe, nie zuvor verwendet, aber war mir dessen bewusst. – Neil