J'ai une liste avec un ItemRenderer personnalisé. ItemRenderer contient une case à cocher et un libellé. Le composant avec la liste a une case à cocher 'Sélectionner tout'. Lorsque la case à cocher «Sélectionner tout» est cochée, elle distribue un événement que chaque élément doit écouter pour sélectionner sa propre case à cocher. L'événement eventlistener est ajouté lors de la créationComplete de chaque élément et l'événement est distribué correctement lorsque la case à cocher 'select all' est sélectionnée, mais que l'écouteur du ItemRenderer personnalisé n'écoute pas.Flex3: Le rendu d'élément personnalisé n'écoute pas les événements distribués par le parent
Comment faire pour que ItemRenderer écoute un événement distribué dans son parent?
Je vais ajouter quelques exemples de code pour clarifier:
------- container ----------
<mx:VBox>
<mx:Script>
<![CDATA[
public var user1 = new User(1, "Jack");
public var user2 = new User(2, "John");
public var user3 = new User(3, "Mary");
[Bindable]
public var users:ArrayCollection = new ArrayCollection([user1], [user2], [user3]);
public static const SELECT_ALL_USERS:String = "selectAllUsers";
private function selectAllChangeHandler():void
{
if (selectAll.selected)
dispatchEvent(new Event(SELECT_ALL_USERS,true));
}
]]>
</mx:Script>
<mx:CheckBox id="selectAll" change="{selectAllChangeHandler()}" />
<mx:List dataProvider="{users}" itemRenderer="myRenderer" />
</mx:VBox>
------- renderer ----------
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox creationComplete="{init()}">
<mx:Script>
<![CDATA[
private function init():void
{
addEventListener (Container.SELECT_ALL, selectAllHandler, false, 0, true);
}
private function selectAllHandler():void
{
checkbox.selected=true;
}
private function selected(id:int):Boolean
{
return id==1 || id==3;
}
]]>
</mx:Script>
<mx:CheckBox id="checkbox" selected="{selected(data.id)}" />
<mx:Label text="{data.name}" />
</mx:HBox>
S'il vous plaît noter que les utilisateurs ArrayCollection ou ses objets utilisateur contenant ne peuvent pas être modifiés parce que je besoin des valeurs plus tard. Ainsi, lorsque vous cliquez sur 'selectAll', chaque case de la liste doit également être cochée.