如何使用变量更改代码中的应用程序状态?当我提供静态字符串时,它可以正常工作,但不能使用变量。
例如,这有效: (parent as mx.core.Application).currentState ='history'
这不是: (parent as 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 :(得分: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(event.item.@data));
currentState = String(event.item.@data);
}
]]>
</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>
答案 1 :(得分:0)
我猜你是从XML获取这个,试试xml。@ data.toString()
希望有所帮助。
编辑:mxml看起来应该如下所示,它应该可以正常使用event.item。@ data
<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>