Программно включить / отключить кнопки меню в Flex 4 - PullRequest
4 голосов
/ 18 октября 2010

В моем проекте Flex4 (AIR) есть следующий XML, определяющий начало интерфейса моего меню:

<mx:MenuBar x="0" y="0" width="100%" id="myMenuBar" labelField="@label" itemClick="menuChange(event)">
    <mx:dataProvider>
    <s:XMLListCollection>
    <fx:XMLList xmlns="">
        <menu label="File">
            <item label="New"/>
            <item label="Load"/>
            <item label="Save" enabled="false"/>
        </menu>
        <menu label="Help">
            <item label="About"/>
        </menu>
    </fx:XMLList>
    </s:XMLListCollection>
    </mx:dataProvider>
</mx:MenuBar>

Я пытаюсь найти синтаксис, который позволит мне установить кнопку сохранения в значение enable = true после загрузки файла, нажав кнопку «Загрузить», однако я не могу понять синтаксис, может кто-то сделать предложение, пожалуйста .

В настоящее время обнаружение нажатий кнопок осуществляется с помощью Switch / Case, проверяющего результат String метки MenuEvent event.item. @. Может быть, это не лучший способ?

Ответы [ 2 ]

5 голосов
/ 20 октября 2010

Отвечая на мой собственный вопрос .... еще раз.Что это с тем, что я делаю, кажется, никто не хочет отвечать ???

В любом случае, вот оно:

Оказывается, так как menubar определен в XML, и этосовершенно произвольно, это полностью зависит от того, как вы решите определить свое меню, в моем случае, в соответствии с приведенным выше XML-меню, синтаксис для изменения состояния «eanabled» кнопки «Сохранить» будет выглядеть следующим образом.

menubarXML.item.(@label=="Save").@enabled = "true";

где enubarXML - это XMLListCollection, содержащая XMLList, который я переопределил отдельно.

[Bindable]
        public var menuBarCollection:XMLListCollection;

        private var menubarXML:XMLList =<>
            <menu label="File">
                <menuitem label="New" data="1A"/>
                <menuitem label="Open" data="1B"/>
                <menuitem label="Save" data="1C" enabled="false"/>
            </menu>
            <menu label="Help" data="2A">
                <menuitem label="About" data="2A"/>
            </menu>
            </>;

Затем вызовите эту функцию при завершении создания приложений:

private function initCollections():void {
            menuBarCollection = new XMLListCollection(menubarXML);
        }

и, конечно, определение XML для XMLmenubar (настройте его по мере необходимости):

<mx:MenuBar id="myMenuBar" labelField="@label" itemClick="menuChange(event)" dataProvider="{menuBarCollection}"/>

Надеюсь, кто-нибудь найдет полезными плоды моего труда.

0 голосов
/ 11 января 2011
private var actions : Object = {
    mi_new : mi_new,
    mi_open : mi_open
};

protected function myMenuBar_itemClickHandler(event:MenuEvent):void
{
    actions[event.item.@action]();
}

private function mi_new() : void {
    // do new stuff
}

private function mi_open() : void {
    // do open stuff
}

private var menubarXML:XMLList =<>
    <menu label="File">
        <menuitem label="New" data="1A" action="mi_new"/>
        <menuitem label="Open" data="1B" action="mi_open"/>
        <menuitem label="Save" data="1C" enabled="false"/>
    </menu>
    <menu label="Help" data="2A">
        <menuitem label="About" data="2A"/>
    </menu>
    </>;
...