royale flex actionscript

royale - Flex: función de llamada del componente incluido



apache royale (2)

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?


Agregar 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 pude decir de dónde viene el texto actual, pero si proviene del menú, puede que tenga que crear su propio evento flexible personalizado o crear una variable común para que accedan las dos partes. El primero es generalmente preferido.

PS: la metadata del evento también se puede lograr agregando el detector de eventos cuando finaliza la creación de la aplicación. Usted agregaría a main:

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


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

Cambia 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'')}"/>**