欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

flex 多 State(场景)下组件不能访问的解决方案

程序员文章站 2022-09-25 12:33:20
原因分析:   Flex 创建多个 State (场景)后 默认只会检查主State(场景)下的组件 对于在其他 State 下创建的组件在没有跳转到  ...
原因分析:

 

Flex 创建多个 State (场景)后 默认只会检查主State(场景)下的组件 对于在其他 State 下创建的组件在没有跳转到

 

该State(场景)之前是不可用的 

 

 

[html]  

<?xml version="1.0" encoding="utf-8"?>  

<s:Application xmlns:fx="https://ns.adobe.com/mxml/2009"   

               xmlns:s="library://ns.adobe.com/flex/spark"   

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">  

      

    <fx:Script>  

        <![CDATA[ 

 

 

        function init():void{ 

            //无法访问存在于场景"State2"中的组件 

            myText.text="NotFound"; 

        }    

 

 

            protected function btn_clickHandler(event:MouseEvent):void 

            { 

                // TODO Auto-generated method stub 

            } 

 

        ]]>  

    </fx:Script>  

    <s:layout>  

        <s:BasicLayout/>  

    </s:layout>  

    <s:states>  

        <s:State name="State1"/>  

        <s:State name="State2"/>  

    </s:states>  

    <fx:Declarations>  

        <!-- 将非可视元素(例如服务、值对象)放在此处 -->  

    </fx:Declarations>  

    <s:Button x="135" y="228" label="按钮" id="btn" click.State2="btn_clickHandler(event)"/>  

      

    <!-- myText 是存在于 State2 中-->  

    <s:TextInput includeIn="State2" x="134" y="175" id="myText"/>  

  

</s:Application>  

 

 

解决方案:

 

[html]  

<?xml version="1.0" encoding="utf-8"?>  

<s:Application xmlns:fx="https://ns.adobe.com/mxml/2009"   

               xmlns:s="library://ns.adobe.com/flex/spark"   

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()">  

      

    <fx:Script>  

        <![CDATA[ 

 

        import mx.events.*; 

             

        function init():void{ 

            //在主场景中加入场景变化监听器 

            this.addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE,stateChange); 

        } 

             

            function stateChange(event:StateChangeEvent):void{ 

                //当场景(State)跳转到"State2"时 操作组件 

                if(event.newState=="State2"){ 

                    myText.text="OK"; 

                } 

            }    

 

 

            protected function btn_clickHandler(event:MouseEvent):void 

            { 

                currentState="State2"; 

            } 

 

        ]]>  

    </fx:Script>  

    <s:layout>  

        <s:BasicLayout/>  

    </s:layout>  

    <s:states>  

        <s:State name="State1"/>  

        <s:State name="State2"/>  

    </s:states>  

    <fx:Declarations>  

        <!-- 将非可视元素(例如服务、值对象)放在此处 -->  

    </fx:Declarations>  

    <s:Button x="135" y="228" label="按钮" id="btn" click="btn_clickHandler(event)"/>  

      

    <!-- myText 是存在于 State2 中-->  

    <s:TextInput includeIn="State2" x="134" y="175" id="myText"/>  

  

</s:Application>