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>

これは私の Welcome コンポーネントです

<?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

カスタム イベントには bubbling=false が設定されているため、systemManager にバブリングしません。試す:

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

または、イベントをディスパッチするオブジェクトにリスナーを追加します。

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

2 番目の解決策は一般的に優れている/推奨されます - イベントのバブリングが少ないのは良いことです

于 2012-12-17T16:59:57.033 に答える