1 votes

Ajout d'événements aux options de menu

/Code ActionScript

import mx.controls.Menu ; import 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;
        }

// Info XML

        <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>

// composant

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

comment ajouter des addevents aux menus du popupButton.

1voto

Eric Belair Points 3738

Voici comment je m'y prends : ....

Ajoutez un attribut à chacun des éléments XML pour stocker un nom d'événement pour chaque élément de menu :

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

Et ajoutez un écouteur d'événements pour chaque événement connu lorsque le composant parent est initialisé :

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

    addEventListener("child1Event", child1EventHandler);
}

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

(Vous pourriez même analyser le XML pour ajouter les récepteurs d'événements de façon dynamique).

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

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

Ajouter un gestionnaire d'événement 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);" />

0voto

domih Points 265

Ajouter

menu12.addEventListener(MenuEvent.ITEM_CLICK,itemClickHandler);

à la fin de votre fonction init puis ajoutez la fonction listener

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

à votre script.

0voto

John Doe Points 61

Je ne pense pas qu'il soit possible de placer un gestionnaire d'événements sur un nœud XML spécifique de la façon dont vous le souhaitez. Il faut regarder l'événement qui arrive pour savoir quel gestionnaire doit être exécuté. Jetez un coup d'œil au concept de gardes de Theo Hultberg pour rendre le code de filtrage plus propre :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X