【问题标题】:changing the state of the variable from the child component using custom event使用自定义事件从子组件更改变量的状态
【发布时间】:2012-12-04 18:18:52
【问题描述】:

这是主要应用程序

<?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...我是初始学习者.. 但它不起作用..请帮助我..

【问题讨论】:

    标签: actionscript-3 apache-flex actionscript flex3


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我们可以在不使用事件的情况下完成这项任务吗...在这种情况下,当单击按钮时(id=fillForm)我们可以编写 click="this.parent.myviewstack.currentIndex=1" 之类的东西这不使用自定义事件..
    • 是的,你可以 - 但事件的优点是它们更灵活。如果您决定重新排列组件的布局,则必须手动调整所有路径(this.parent.myComponent.etc)。
    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 2021-06-30
    • 1970-01-01
    • 2021-06-08
    • 2017-07-10
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    相关资源
    最近更新 更多