Pregunta

Esto es similar a mi publicación anterior. Pero esta vez quiero llamar a una función que existe en la página principal de mxml.

Esta es mi página principal de mxml:

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> 

Aquí está mi página incluida:

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>

¿Cómo llamo a la función changeText desde el botón en menu.mxml?

¿Fue útil?

Solución

Añadir esto al menú:

  <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"));"/>

Cambiar principal a:

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

No podría decir de dónde proviene el texto actual, pero si es del menú, es posible que tenga que crear su propio evento flexible personalizado o crear una variable común para que accedan las dos partes. Por lo general, se prefiere el primero.

P.S. Lo de los metadatos del evento también podría lograrse agregando el detector de eventos cuando se complete la creación de la aplicación. Agregarías a main:

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

Otros consejos

hay una manera más simple, solo usa parentDocument.

Cambie esto:

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

a:

<mx:Button x="181" y="10" width="80" label="Run Function" id="btnThree" click="{parentDocument*.changeText('changeText')}"/>**
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top