我正在将我的Flex3应用程序移植到Flex4(FlashBuilder4)。除了一件事,我得到了全新的状态概念。在自定义组件(单独的mxml文件)中,我正在使用主级别Application的状态。 在Flex3中它是:
<mx:State name="only_view_mode">
<mx:RemoveChild target="{myComponent.button1}" />
</mx:State>
在Flex4中,它应该类似:
<mx:State name="only_view_mode" />
和
<mx:LinkButton id="button1" excludeFrom="???" />
我的问题是:如何从组件访问应用程序状态?我检查了官方参考资料(http://www.adobe.com/go/learn_flex4_alldocumentation_en)和Google当然但没有成功。
提前致谢
答案 0 :(得分:0)
尝试使用
FlexGlobals.topLevelApplication.currentState
答案 1 :(得分:0)
由于需要字符串,因此无法正常工作。我试着以可能的方式尝试它。到目前为止,我遇到了这个非常难看的解决方案:我为主要组件组件的checkint状态更改添加了一个事件监听器:
<?xml version="1.0" encoding="utf-8"?>
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="{onCreationComplete();}">
<fx:Script>
<![CDATA[
import mx.core.FlexGlobals;
import mx.events.StateChangeEvent;
private function onCreationComplete():void {
FlexGlobals.topLevelApplication.addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, onStateChanged);
}
private function onStateChanged(event:StateChangeEvent):void {
currentState = event.newState;
}
]]>
</fx:Script>
<s:states>
<s:State name="default" />
<s:State name="login" />
</s:states>
<s:TextArea includeIn="login"/>
</s:Panel>
如果有更好的解决方案,请告诉我。顺便说一下,我有一种预感,即State组件的basedOn属性是要走的路。但不知道它期望什么样的格式:
<s:State name="login" basedOn="???" />