Flex 3:如何使用变量更改代码中的状态

时间:2010-07-28 20:33:36

标签: flex flash

如何使用变量更改代码中的应用程序状态?当我提供静态字符串时,它可以正常工作,但不能使用变量。

例如,这有效:   (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;
  }

2 个答案:

答案 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>