Flex中兄弟姐妹对象之间的事件流

时间:2011-11-17 15:47:03

标签: flex4 event-handling custom-component addeventlistener event-dispatching

我在Flex的主应用程序中有一个菜单栏和一个自定义组件。单击菜单栏中的菜单项时,我需要引发一个自定义事件,该事件也可以由自定义组件监听。或者它也可以是菜单事件,在选择其中一个菜单项时引发。我怎么能做到这一点?

如果我没有错,菜单项click事件将从菜单栏传播到应用程序(在冒泡阶段),并且不会转到自己的兄弟组件。

示例代码:

 <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:code="http://code.google.com/p/flexlib/" >

 <fx:Script>
    <![CDATA[


                    protected function menuBar_itemClickHandler(event:MenuEvent):void
                    {
                            if(event.item.@label=='New File'){
                               //I dont want to write code like
                              // mainTab.someProperty= someproperty
                              //Instead if this event or other custom event 
                              //be raised which could be listened by the custom
                              //component and the listener could be written in the
                              //component itself
                             }
                    }

            ]]>
</fx:Script>

 <mx:MenuBar id="menuBar"
            labelField="@label"
            showRoot="false"
            width="100%" height="4%"
            horizontalCenter="0" verticalCenter="0"
            itemClick="menuBar_itemClickHandler(event)">

    <mx:dataProvider>
        <fx:XML>
            <root>
                <parent label="File">
                                            <node label="New File" />
                    <node label="Load" />
                    <node label="Save" />
                    <node label="Exit" />

                </parent>
                            </root>
                    </fx:XML>
    </mx:dataProvider>
</mx:MenuBar>
    <code:MDICanvas width="100%" height="95%">

       <!-- MY CUSTOM COMPONENT -->

   <local:MainTab id="mainTab" width="100%" height="100%" />

    </code:MDICanvas>
 </s:Application>

1 个答案:

答案 0 :(得分:0)

使用诸如欧芹,swiz,机器人腿之类的应用程序框架来轻松实现这一目标。 您可以在任何范围内收听和传播事件。