2010-07-28 39 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