FLEX3:自定义项目渲染不听父母所分派的事件 [英] Flex3: Custom Item Renderer does not listen to events dispatched by parent

查看:143
本文介绍了FLEX3:自定义项目渲染不听父母所分派的事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个定义ItemRenderer列表。的itemRenderer包含一个复选框和标签。 与列表中的组件具有全选复选框。 当全选复选框被选中,将分派每个项目要听,以便选择自己的复选框的事件。 该事件监听器被添加在每个项目中的creationComplete,当选择全选复选框的情况下被正确调度,但在自定义监听器的ItemRenderer不听。

I have a List with a custom ItemRenderer. The ItemRenderer contains a Checkbox and a Label. The component with the List has a 'select all' checkbox. When the 'select all' checkbox is checked, it dispatches an event that each item should listen to in order to select its own checkbox. The eventlistener is added on creationComplete of each item, and the event is dispatched correctly when the 'select all' checkbox is selected, but the listener in the custom ItemRenderer does not listen.

如何让我的itemRenderer听那个被分派在其母公司??

How do I make the ItemRenderer listen to an event that is dispatched in its parent??

我会添加一些code例子来阐明:

I'll add some code examples to clarify:

------- 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或其包含的用户对象不能改变,因为我需要更高的价值。 因此,当'全选被点击时,列表中的每个复选框也应检查

Please note that the users ArrayCollection or its containing user objects cannot be changed because I need the values later on. So when 'selectAll' is clicked, each checkbox in the list should also be checked.

推荐答案

您定制的itemRenderer不应该与他们的父母注册事件侦听器,但你的全选复选框,即

Your custom ItemRenderers should not register an event listener with their parent, but with your "select all" checkbox, i.e.

theCheckbox.addEventListener(YourEvent.YOUR_EVENT, itemRendererSelectAllHandler);

如果做不到这一点,你可以发表您的code它增加了事件侦听器,其中调度该事件形成的复选框?

Failing that, can you post your code which adds the event listener and which dispatches the event form the checkbox?

编辑:

这是你的错误:在渲染器的init(),你需要不添加事件侦听器的渲染,而是将指派该事件的容器。因此,使之成为

Here's your bug: In renderer's init(), you need to add an event listener not to the renderer, but to the container which dispatches the event. So make that a

container.addEventListener(Container.SELECT_ALL_USERS, selectAllHandler, false, 0, true);

这篇关于FLEX3:自定义项目渲染不听父母所分派的事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆