2012-12-17 104 views
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 ...我最初学习.. 但它不是working..Please帮助我..

回答

0

当您的自定义事件有bubbling = false,它不会冒泡到systemManager。尝试:

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

另外,监听器添加到正在调度此事件的对象:

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

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

+0

才能在没有使用事件的情况下执行此任务...在这种情况下,当单击按钮时(id = fillForm),我们可以在不使用自定义事件的情况下编写click =“this.parent.myviewstack.currentIndex = 1”。 – user533

+0

yes you可以 - 但事件的好处是他们更灵活。如果您决定重新排列组件的布局,则必须手动调整所有路径(this.parent.myComponent.etc)。 – 2012-12-21 04:44:20