2

Flex アプリケーションがあり、プログラムでメニューを生成する必要があります。非常に複雑で動的になります。これを行うための最良の手法は何ですか?

更新: RIAstar が提案したように、メニュー項目と子プロパティのオブジェクトを使用して、以下のコードをテストしました。「入力」メニューが表示されないことを除いて、これは機能しています。バイパスされているようです。私が見るものは次のとおりです。

スクリーンショット

「追加->入力->デバイス{0..8}」を期待していました。

アイデアをありがとう、フレッド。

<?xml version="1.0" encoding="utf-8"?>

<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.controls.Menu;
        protected function button1_clickHandler(event:MouseEvent):void
        {
            var toplevelMenu:Object = new Object();
            toplevelMenu.label = "Top Level";
            var addMenu:Object = new Object();
            addMenu.label = "Add";
            toplevelMenu.children = addMenu;

            var inputMenu:Object = new Object();
            inputMenu.label = "Input";

            var inputDevicesMenu:ArrayCollection = new ArrayCollection();
            for (var i:int = 0;i < 10;i++) {
                if ((i % 2) == 0) {
                    var inputDeviceMenu:Object = new Object();
                    inputDeviceMenu.label = "Device " + i;
                    inputDevicesMenu.addItem(inputDeviceMenu);
                }
            }
            if (inputDevicesMenu.length > 0) {
                inputMenu.children = inputDevicesMenu;
            }
            addMenu.children = [inputMenu];

            var menu:Menu = Menu.createMenu(this, toplevelMenu, false);
            menu.show(event.stageX, event.stageY);
        }
    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Button x="56" y="28" label="Show Menu" click="button1_clickHandler(event)"/>

4

1 に答える 1

2

RIAstar の提案とあなたのコードに従って、button1_clickHandler 関数にいくつかの変更を加えました: -

関数 button1_clickHandler の更新されたコード: -

protected function button1_clickHandler(event:MouseEvent):void
            {
                var addMenu:Object = new Object();
                addMenu.label = "Add";

                var inputMenu:Object = new Object();
                inputMenu.label = "Input";

                var outputMenu:Object = new Object();
                outputMenu.label = "Output";

                var inputOutputDevicesMenu:ArrayCollection = new ArrayCollection();
                inputOutputDevicesMenu.addItem(outputMenu);
                inputOutputDevicesMenu.addItem(inputMenu);

                addMenu.children = inputOutputDevicesMenu;

                var inputDevicesMenu:ArrayCollection = new ArrayCollection();
                for (var i:int = 0;i < 10;i++) {
                    if ((i % 2) == 0) {
                        var inputDeviceMenu:Object = new Object();
                        inputDeviceMenu.label = "Device " + i;
                        inputDevicesMenu.addItem(inputDeviceMenu);
                    }
                }
                if (inputDevicesMenu.length > 0) {
                    inputMenu.children = inputDevicesMenu;
                }

                var menu:Menu = Menu.createMenu(this, addMenu, true);
                menu.show(event.stageX, event.stageY);
            }

これがいくつかのアイデアを得るのに役立つことを願っています.....

于 2012-10-03T05:20:10.993 に答える