0

这是主要应用程序

<?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
            verticalAlign="middle"
            backgroundColor="white" layout="absolute" initialize="init();"  xmlns:MyComp="screens.*" >
            <mx:Script>
                <![CDATA[
                import screens.MyEvent;

                    private function init():void
                    {
                         systemManager.addEventListener("data_transfer",handleDataTransfer);

                    }
                    private function handleDataTransfer(evt:MyEvent):void{

               this.myViewStack.selectedIndex=1;

                 }


                ]]>
            </mx:Script>


    <mx:ViewStack id="myViewStack" selectedIndex="0" width="1110" height="636">
    <MyComp:Welcome />
        <MyComp:Screen id="fillPage" />
        </mx:ViewStack>
    </mx:Application>

这是我的欢迎组件

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="930" height="300" >
<mx:Script>
    <![CDATA[
       private function changeHandler():void{
        var myEVT:MyEvent = new MyEvent("data_transfer",false, true);
        this.dispatchEvent(myEVT);
       }

    ]]>
</mx:Script>
 <mx:Button label="Fill The Form" id="fillForm" click="changeHandler()"/>           
</mx:Canvas>

这是我的 screen.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
<mx:Label text="hai">
</mx:Label> 
</mx:Canvas>

这是 MYEvent.as

package screens
{
    import flash.events.Event;

    public class MyEvent extends Event
    {

    public static const DATA_TRANSFER:String = "data_transfer";

        public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }

    }
}

我想通过单击欢迎 mxml 处的按钮来获取屏幕 mxml...我是最初的学习者..但它不起作用..请帮助我..

4

1 回答 1

0

由于您的自定义事件有冒泡=假,它不会冒泡到 systemManager。尝试:

var myEVT:MyEvent = new MyEvent("data_transfer", true, true);

或者,将侦听器添加到正在调度事件的对象:

welcomePage.addEventListener("data_transfer",handleDataTransfer);
....
<MyComp:Welcome id="welcomePage" />

第二种解决方案通常更好/首选 - 更少的事件冒泡是一件好事

于 2012-12-17T16:59:57.033 回答