flex 多 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>
原因分析:
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>
觉得可用,就经常来吧! 欢迎评论哦! html5教程,巧夺天工,精雕玉琢。小宝典献丑了!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: flex 多 State(场景)下组件不能访问的解决方案
本文地址: https://pptw.com/jishu/586435.html