[英]Flex 3: How to change state in code, using a variable
如何使用變量更改代碼中的應用程序狀態? 當我提供靜態字符串時,它可以正常工作,但不能使用變量。
例如,這可以正常工作:(父作為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>
這里是處理程序:
private function menuHandler(event:MenuEvent):void {
var newstate:String;
newstate = @data.toString();
(parent as mx.core.Application).currentState = newstate;
}
這是我舉個簡單的例子:
<?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>
我猜你是從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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.