Question

Ceci est similaire à mon précédent message. Mais cette fois, je veux appeler une fonction qui existe sur la page principale du XML.

Voici ma page mxml principale:

main.mxml

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*">
    <mx:Script>
        <![CDATA[   
        public function changeText(currentText:String):void{

            switch (currentText){
                case "changeText":
                    lblOne.text = "More Text";                  
            }
        }
            ]]>
    </mx:Script>

    <mx:HBox x="137.5" y="10" width="100%" height="100%">
        <ns1:menu id="buttons"> </ns1:menu>
    </mx:HBox>
    <mx:Canvas x="137" y="88" width="408.5" height="200">
        <mx:HBox x="0" y="10" width="388.5" height="190">
            <mx:Panel width="388" height="179" layout="absolute">
                <mx:Label x="10" y="10" text="Some Text" visible="{buttons.showLabel}" id="lblOne"/>
            </mx:Panel>
        </mx:HBox>
    </mx:Canvas>
</mx:Application> 

Voici ma page incluse:

menu.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
    <mx:Script>
        <![CDATA[
            [Bindable] public var showLabel:Boolean = true;
        ]]>
    </mx:Script>
    <mx:MenuBar width="380" height="58"></mx:MenuBar>
    <mx:Button x="10" y="10" width="80" label="Show" id="btnOne" click="this.showLabel=true;" />
    <mx:Button x="94" y="10" width="80" label="Hide" id="btnTwo" click="this.showLabel=false;"/>
    <mx:Button x="181" y="10" width="80" label="Run Function" id="btnThree" click="{changeText('changeText')}"/>
</mx:Canvas>

Comment appeler la fonction changeText à partir du bouton de menu.mxml?

Était-ce utile?

La solution

Ajouter ceci au menu:

  <mx:Metadata>
         [Event(name="buttonClicked", type="flash.events.Event")]
    </mx:Metadata>

 <mx:Button x="10" y="10" width="80" label="Show" id="btnOne" click="this.showLabel=true;dispatchEvent(new Event("buttonClicked"));"/>

Modifiez le paramètre principal en:

  <ns1:menu id="buttons" buttonClicked="changeText("Your Text");">

Je ne saurais dire d'où vient le texte actuel, mais s'il provient de menu, vous devrez peut-être créer votre propre événement flex personnalisé ou créer une variable commune pour les deux parties. Le premier est généralement préféré.

P.S. Les métadonnées d'événement pourraient également être obtenues en ajoutant l'écouteur d'événements à la fin de la création de l'application. Vous ajouteriez à main:

buttons.addEventListener("buttonClicked",changeText("Your Text"));

Autres conseils

il existe un moyen plus simple, utilisez simplement parentDocument.

Modifiez ceci:

<mx:Button x="181" y="10" width="80" label="Run Function" id="btnThree" click="{changeText('changeText')}"/>

à:

<mx:Button x="181" y="10" width="80" label="Run Function" id="btnThree" click="{parentDocument*.changeText('changeText')}"/>**
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top