2

Flexのメインアプリケーションにメニューバーとカスタムコンポーネントがあります。メニューバーのメニュー項目をクリックすると、カスタムコンポーネントでリッスンできるカスタムイベントを発生させる必要があります。または、メニュー項目の1つを選択したときに発生するメニューイベントにすることもできます。どうすればこれを達成できますか?

私が間違っていなければ、メニュー項目のクリックイベントはメニューバーからアプリケーションに伝播し(バブリングフェーズ)、その兄弟であるカスタムコンポーネントには移動しません。

サンプルコード:

 <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>
4

1 に答える 1

0

これを簡単に実現するには、 parsley 、 swiz 、 robot leg などのアプリケーション フレームワークを使用します。任意のスコープでイベントをリッスンして伝達できます。

于 2013-07-28T18:14:05.990 に答える