2010-11-25 9 views
0

J'ai un rendu d'élément personnalisé que j'utilise dans une liste. Il y a un CheckBox et un ColorPicker dans le rendu d'élément. J'ai créé mes propres classes d'événements personnalisés pour ces deux éléments et ils ne font pas bouillir leurs événements.Flex4 Liste ItemRenderer enfants et événements

Vous pouvez également cliquer sur l'élément dans la liste, j'ai 3 écouteurs attachés à la liste, je ne veux pas que le gestionnaire d'élément de liste se déclenche lorsque les enfants de la liste sont cliqués, comment faire?

Extrait ci-dessous:

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

Répondre

1

Ajouter un écouteur de clic à votre article et vérifiez la renderer propriété event.target pour voir si elle était la case à cocher qui a été cliqué sur, si elle est que vous pouvez appeler event.stopImmediatePropagation(). Voici un exemple très simple, aucun autre écouteur pour MouseEvent.CLICK ne sera renvoyé.

<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

Merci pour la réponse, juste ce que je cherchais, jamais utilisé auparavant, mais en était conscient. – Neil

Questions connexes