カスタム ItemRenderer を持つリストがあります。ItemRenderer には、チェックボックスとラベルが含まれています。リストを持つコンポーネントには、「すべて選択」チェックボックスがあります。「すべて選択」チェックボックスがチェックされると、各アイテムが独自のチェックボックスを選択するためにリッスンする必要があるイベントが送出されます。eventlistener は各アイテムの creationComplete に追加され、「すべて選択」チェックボックスが選択されている場合、イベントは正しくディスパッチされますが、カスタム ItemRenderer のリスナーはリッスンしません。
親でディスパッチされたイベントを ItemRenderer にリッスンさせるにはどうすればよいですか??
明確にするために、いくつかのコード例を追加します。
------- 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>
後で値が必要になるため、ユーザーの ArrayCollection またはそれに含まれるユーザー オブジェクトは変更できないことに注意してください。したがって、「selectAll」をクリックすると、リスト内の各チェックボックスもチェックする必要があります。