Flex 3: как изменить состояние в коде, используя переменную - PullRequest
0 голосов
/ 29 июля 2010

Как изменить состояние приложения в коде, используя переменную? когда я предоставляю статическую строку, она работает нормально, но не с переменной.

Например, это работает: (родительский как 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;
  }

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Вот быстрый пример, который я взбил:

<?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>
0 голосов
/ 29 июля 2010

Я предполагаю, что вы получаете это из 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...