Flex: вызов функции из включенного компонента - PullRequest
3 голосов
/ 15 октября 2008

Это похоже на мою предыдущую публикацию. Но на этот раз я хочу вызвать функцию, которая существует на главной странице mxml.

Это моя главная страница 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> 

Вот моя включенная страница:

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>

Как вызвать функцию changeText с помощью кнопки на menu.mxml?

Ответы [ 2 ]

3 голосов
/ 15 октября 2008

Добавить это в меню:

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

Изменить основной на:

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

Я не могу сказать, откуда поступает текущий текст, но если он из меню, вам, возможно, придется создать собственное событие flex или создать общую переменную для доступа двух частей. Первый обычно предпочтителен.

P.S. Метаданных о событии также можно достичь, добавив прослушиватель событий после завершения создания приложения. Вы добавили бы на главную:

buttons.addEventListener("buttonClicked",changeText("Your Text"));
0 голосов
/ 29 августа 2009

есть более простой способ, просто используйте parentDocument.

Изменить это:

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