2010-07-28 35 views
0

如何使用變量更改代碼中的應用程序狀態?當我提供一個靜態字符串時,它工作正常,但沒有變量。Flex 3:如何使用變量更改代碼中的狀態

例如,這個工程: (母公司爲mx.core.Application,).currentState = '歷史'

這並不: (母公司爲mx.core.Application,).currentState = @data

是的,我知道@data正在填充,因爲我打印在一個警告框中。是的,我已經嘗試過 「currentState = @data」 和「currentState = '@data' 可悲的是,他們沒有工作

這是菜單對象:。

<mx:MenuBar id="mnuMain" labelField="@label" itemClick="menuHandler(event);"> 
    <mx:XMLList> 
     <menuitem label="File"> 
      <menuitem label="Exit" data="exit" /> 
     </menuitem> 
     <menuitem label="View"> 
      <menuitem label="Home" data="home" /> 
      <menuitem label="Monitor" data="impmon" /> 
      <menuitem label="History" data="history" /> 
      <menuitem label="Tables" data="tables" /> 
      <menuitem label="Schema View" data="schema" />    
     </menuitem> 
    </mx:XMLList> 
</mx:MenuBar> 

這裏是處理程序:

private function menuHandler(event:MenuEvent):void { 
var newstate:String; 
newstate = @data.toString();   
(parent as mx.core.Application).currentState = newstate; 
    } 
+0

哪裏是符號@來自(哪裏?我認爲你需要確保數據是一個位於states數組中的字符串類型的變量。 – Wes 2010-07-28 20:37:50

+0

嘗試event.item。@ data.toString() – JustLogic 2010-07-28 21:18:08

回答

1

下面是一個簡單的例子,我掀起了:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
    <mx:states> 
     <mx:State name="exit"> 
      <mx:SetProperty target="{label1}" name="text" value="Exit State"/> 
     </mx:State> 
     <mx:State name="home"> 
      <mx:SetProperty target="{label1}" name="text" value="Home State"/> 
     </mx:State> 
     <mx:State name="impmon"> 
      <mx:SetProperty target="{label1}" name="text" value="Impmon State"/> 
     </mx:State> 
     <mx:State name="history"> 
      <mx:SetProperty target="{label1}" name="text" value="History State"/> 
     </mx:State> 
     <mx:State name="tables"> 
      <mx:SetProperty target="{label1}" name="text" value="Tables State"/> 
     </mx:State> 
     <mx:State name="schema"> 
      <mx:SetProperty target="{label1}" name="text" value="Schema State"/> 
     </mx:State> 
    </mx:states> 

    <mx:Script> 
     <![CDATA[ 
      import flash.utils.getQualifiedClassName; 
      import mx.events.MenuEvent; 

      private function menuHandler(event:MenuEvent):void 
      { 
       trace("Clicked", String([email protected]));  
       currentState = String([email protected]); 
      } 
     ]]> 
    </mx:Script> 

    <mx:MenuBar id="mnuMain" labelField="@label" itemClick="menuHandler(event)"> 
    <mx:XMLList> 
     <menuitem label="File"> 
      <menuitem label="Exit" data="exit" /> 
     </menuitem> 
     <menuitem label="View"> 
      <menuitem label="Home" data="home" /> 
      <menuitem label="Monitor" data="impmon" /> 
      <menuitem label="History" data="history" /> 
      <menuitem label="Tables" data="tables" /> 
      <menuitem label="Schema View" data="schema" />    
     </menuitem> 
    </mx:XMLList> 
</mx:MenuBar> 

<mx:Label horizontalCenter="0" verticalCenter="0" fontSize="30" fontWeight="bold" color="#ffffff" text="Default State" id="label1"> 
    <mx:filters> 
     <mx:DropShadowFilter/> 
    </mx:filters> 
</mx:Label> 

</mx:Application> 
0

我猜你是從XML得到這個,試試XML @ data.toString()

希望幫助

編輯:MXML看起來應該像下面的,它應該很好地工作event.item @數據

<mx:MenuBar id="mnuMain" labelField="@label" itemClick="menuHandler(event);" showRoot="false"> 
    <mx:dataProvider> 
     <mx:XMLList> 
      <menu> 
       <menuitem label="test"> 
       <menuitem label="History" data="history" /> 
       </menuitem> 
      </menu> 
     </mx:XMLList> 
    </mx:dataProvider> 
</mx:MenuBar> 
+0

是的@data來自XML列表。 嘗試了您的建議,它產生了:「1120:訪問未定義的屬性。」 也試過: var newstate:String; newstate = @ data.toString(); 這產生了:「1178:試圖通過帶有靜態類型flexmon的引用訪問不可訪問的屬性數據。」這是我試圖改變狀態時最初得到的錯誤。 – 2010-07-28 21:02:53

+0

我在評論中看到張貼代碼並不正常。我已經添加了menuBar對象代碼,以及主要問題的事件處理程序。 – 2010-07-28 21:14:58

+0

嘗試event.item。@ data.toString() – JustLogic 2010-07-28 21:15:39