0

我有一个与在 Flex 中启用/禁用菜单项相关的小问题。

问题是我可以直接禁用 menuItem 但不能禁用它的子菜单项。

我有以下菜单结构:

public var menuAgroApp:XMLList =
        <>
            <menuitem label="ADMIN">
                <menuitem label="Option 1"/>
                <menuitem label="Option 2"/>
                <menuitem label="Option 3"/>
                <menuitem label="Option 4"/>
            </menuitem>
            <menuitem label="Prices">
                <menuitem label="Price 1"/>
                <menuitem label="Price 2"/>
                <menuitem label="Price 3"/>
            </menuitem>
            <menuitem label="Orders">
                <menuitem label="Order 1"/>
                <menuitem label="Order 2"/>
            </menuitem>
        </>;

使用此代码,我可以禁用菜单“ADMIN”,但不能禁用任何选项:

menuPrincipal.dataDescriptor.setEnabled( XML(modeloGlobal.modelo.menuAgroAppCollection.source[0]), false );

问题是,我怎样才能访问 ADMIN menuItem 中的 menuItems?

谢谢。

4

1 回答 1

0

这是我的解决方案和工作示例

为了控制子菜单项,您需要使用 XML 表达式导航到它,然后指向列表的第一个元素。之所以如此,是因为您的 XML 表达式在常见情况下会传递一个 XMLList。

<?xml version="1.0" encoding="utf-8"?>
<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" minWidth="955" minHeight="600">

<fx:Script>
    <![CDATA[
        [Bindable]public var menuAgroApp:XMLList =
            <>
            <menuitem label="ADMIN">
                <menuitem label="Option 1"/>
                <menuitem label="Option 2"/>
                <menuitem label="Option 3"/>
                <menuitem label="Option 4"/>
            </menuitem>
            <menuitem label="Prices">
                <menuitem label="Price 1"/>
                <menuitem label="Price 2"/>
                <menuitem label="Price 3"/>
            </menuitem>
            <menuitem label="Orders">
                <menuitem label="Order 1"/>
                <menuitem label="Order 2"/>
            </menuitem>
            </>;

        protected function onOnOffAdmin(event:MouseEvent):void
        {
            myMenuBar.dataDescriptor.setEnabled(menuAgroApp[0], false);
        }

        protected function onOnOffAdminOption2(event:MouseEvent):void
        {
            myMenuBar.dataDescriptor.setEnabled(menuAgroApp[0].menuitem.(@label == 'Option 2')[0], false);
        }

    ]]>
</fx:Script>

<s:VGroup x="30" y="30">
    <mx:MenuBar id="myMenuBar" labelField="@label" dataProvider="{menuAgroApp}"/>
    <s:Spacer height="20"/>

    <s:Button label="Set Off Admin" click="onOnOffAdmin(event)" />
    <s:Button label="Set Off Admin/Option2" click="onOnOffAdminOption2(event)" />
</s:VGroup>

</s:Application>
于 2013-09-08T17:30:32.657 回答