来自菜单栏的Flex menuitem禁用

时间:2013-08-15 19:58:27

标签: actionscript-3 flex flex4.5

我在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中访问menuItem?

感谢。

1 个答案:

答案 0 :(得分:0)

这是我的解决方案和working example

为了控制子菜单项,您需要使用XML表达式导航到它,然后指向List的第一个元素。之所以如此,是因为您的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>