2010-06-17 74 views
0

我將我的Flex3應用程序移植到Flex4(FlashBuilder4)。除了一件事,我得到了全新的國家概念。在一個自定義組件(單獨的mxml文件)中,我使用主級應用程序的狀態。 在Flex3是:Flex4在自定義組件中的應用程序狀態

<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)和谷歌當然沒有任何成功。

在此先感謝

回答

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> 

請讓我知道是否有更好的解決方案。順便說一句,我有一個預感,國家組件的basedOn屬性是要走的路。但不知道它期望什麼樣的格式:

<s:State name="login" basedOn="???" /> 
相關問題