Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex3:如何使用变量更改代码中的状态_Apache Flex_Flash - Fatal编程技术网

Apache flex Flex3:如何使用变量更改代码中的状态

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.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>