Flex 4冒泡自定义事件

时间:2009-11-30 00:46:21

标签: events event-handling mxml flex4 event-bubbling

如何在Flex 4中创建冒泡自定义事件?

要在MXML中创建和公开自定义事件,您需要在将使用以下行分派事件的组件中声明它:

<fx:Metadata>
        [Event(name="select", type="my.engine.events.SelectionEvent")]
</fx:Metadata>

这允许您:

<my:CustomComponent select="doSomething()"/>

但是,你如何使这个泡沫向上。我想这样做

<s:DataGroup select="doSomethingForAll();">
   <s:itemRenderer>
      <fx:Component>
         <my:CustomComponent/>
      </fx:Component>
   </s:itemRenderer>
</s:DataGroup/>

谢谢!

4 个答案:

答案 0 :(得分:1)

您的自定义事件必须扩展事件。在构造函数上,您会找到name:stringbubbling:booleancacellable:boolean作为参数。

将bubbling参数设置为true。在您的示例中,元数据标记必须位于DataGroup标记中。

答案 1 :(得分:0)

一个可能的解决方案,但不完全是我想要的是在DataGroup级别添加这行代码。

this.addEventListener(SelectionEvent.SELECTED, onSelect);

这将确保CustomComponent触发的所有事件都是正确的。

答案 2 :(得分:0)

您可以使用内置于扩展类中的指定自定义元标记数据信息扩展s:DataGroup容器,也可以从itemRenderer的“select”事件处理程序中调用“doSomethingForAll()”方法,请参阅下面的代码:

<s:DataGroup         
    dataProvider="{instructions}"        
    width="100%">        
    <s:itemRenderer>
        <fx:Component>
            <my:CustomComponent                    
                select="rendererSelect()">
                <fx:Script>
                    <![CDATA[

                        protected function rendererSelect():void
                        {
                            outerDocument.doSomethingForAll();
                        }

                    ]]>
                </fx:Script>
            </my:CustomComponent>
        </fx:Component>
    </s:itemRenderer>                
</s:DataGroup> 

答案 3 :(得分:0)

捕获dataGroups select事件,然后调度doSomethingForAll()

确保doSomethingForAll事件将其bubbling属性设置为true。

然后将调用在显示列表中监听其上方的doSomethingForAll的任何事件侦听器。