Добавление событий в пункты меню - PullRequest
1 голос
/ 05 мая 2009

// код ActionScript

import mx.controls.Menu; импорт flash.events.MouseEvent;

        private var menu12:Menu;

        private function init():void {
            menu12 = new Menu();
            menu12.labelField = "@label";
            menu12.dataProvider = xmlDP;
            menu12.showRoot = false;
            menu12.width = popUpButton.width;
            popUpButton.popUp = menu12;
        }

// XML Info

        <menu1 label="Some introduction" />
        <menu2 label="Disabled State (disabled)." enabled="false" />
        <sep1 type="separator" />
        <menu3 label="parent">
            <menu4 label="child1" />
        </menu3>
        <menu5 label="parent (disabled)" enabled="false">
            <menu6 label="child1" />
            <menu7 label="child2" />
            <menu8 label="child3" />
        </menu5>
        <menu9 type="separator" />
        <menu10 type="separator" />
        <menu11 id="leftButton" label="Left" type="radio" groupName="radioGroup" toggled="true" enabled="true"  />
        <menu12 id="rightButton" label="Right" type="radio" groupName="radioGroup" enabled="false" />
        <menu13 id="popupButton" label="Popup" type="radio" groupName="radioGroup" enabled="false" />

    </root>

// компонент

<mx:PopUpButton id="popUpButton"
            label="Please select an item"
            openAlways="true"
            creationComplete="init();" />

как добавить дополнения к меню в всплывающей кнопке.

Ответы [ 3 ]

1 голос
/ 05 мая 2009

Вот как я это делаю ....

Добавьте атрибут к каждому из элементов XML, чтобы сохранить имя события для каждого элемента меню:

<menu4 label="child1" eventName="child1Event" />

И добавьте прослушиватель событий для каждого известного события при инициализации родительского компонента:

private function init():void
{
    menu12 = new Menu();
    ...

    addEventListener("child1Event", child1EventHandler);
}

private function child1EventHandler(event:Event):void
{
    ....
}

(Вы можете даже проанализировать XML, чтобы динамически добавить прослушиватели событий

private function init():void
{
    menu12 = new Menu();
    ...

    addEventListener("child1Event", 
        function(event:Event)
        {
            alert(event.type);
        }
        );
}

Добавить обработчик событий itemClick:

private function popUpButton_itemClickHandler(event:MenuEvent):void
{
    if (event.item.@eventName != null)
        dispatchEvent(new Event(event.item.@eventName));
}

<mx:PopUpButton id="popUpButton"
        label="Please select an item"
        openAlways="true"
        creationComplete="init();" 
        itemClick="popUpButton_itemClickHandler(event);" />
0 голосов
/ 05 мая 2009

Я не думаю, что вы можете поместить обработчик событий на конкретный узел XML так, как вам хочется. Вам нужно будет посмотреть, какое событие произойдет, чтобы определить, какой обработчик должен быть запущен. Взгляните на концепцию охранников Тео Хультберга, чтобы сделать код фильтрации чище:

http://blog.iconara.net/2008/03/30/separating-event-handling-from-event-filtering/

0 голосов
/ 05 мая 2009

Добавить

menu12.addEventListener(MenuEvent.ITEM_CLICK,itemClickHandler);

в конце вашей функции инициализации, затем добавьте функцию слушателя

private function itemClickHandler(event:MenuEvent):void{}

к вашему сценарию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...