Apache flex Flex3:如何使用变量更改代码中的状态
如何使用变量更改代码中的应用程序状态?当我提供一个静态字符串时,它可以正常工作,但不能使用变量 例如,这项工作: (父项为mx.core.Application)。currentState='history' 这并不是: (父级为mx.core.Application)。currentState=@data 是的,我知道@data正在填充,因为我在一个警报框中打印它。是的,我已经试过“currentState=@data”和“currentState='@data”。遗憾的是,它们都不起作用 以下是菜单对象:Apache flex Flex3:如何使用变量更改代码中的状态,apache-flex,flash,Apache Flex,Flash,如何使用变量更改代码中的应用程序状态?当我提供一个静态字符串时,它可以正常工作,但不能使用变量 例如,这项工作: (父项为mx.core.Application)。currentState='history' 这并不是: (父级为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>
我猜您是从一个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>
下面是我快速想出的一个例子:
<?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>
符号从何而来?我想您需要确保数据是states数组中字符串类型的变量。try event.item.@data.toString()是的,@数据来自XML列表。尝试了您的建议,它生成了:“1120:访问未定义的属性。还尝试了:var newstate:String;newstate=@data.toString();这产生了:“1178:试图通过静态类型为flexmon的引用访问不可访问的属性数据。”这与我最初尝试更改状态时遇到的错误相同。我发现注释中的发布代码不起作用。我已经在主问题中添加了菜单栏对象代码和事件处理程序。请尝试使用event.item@data.toString()哇!!将分配更改为:newstate=event.item@data.toString();我收到了一条非常可怕的错误信息。它以“TypeError:Error#1009:无法访问空对象引用的属性或方法”开头,我想随后的一行威胁说,如果我再次尝试,就会派人杀了我。不,又犯了那个可怕的错误,现在我想Adobe已经派出了一队杀手来寻找我。
<?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>