Переход гибкого состояния

Я пытаюсь создать переход между состояниями. Первый переход состояния работает нормально (состояние1=>состояние2), но второй ведет себя странно (состояние2=>состояние3). После нажатия кнопки для изменения состояния2=>состояние3 некоторые текстовые области, принадлежащие состоянию2, отображаются и остаются на экране. Я не уверен, почему. Я был бы признателен, если бы кто-то здесь мог мне помочь.

Мой код.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

    <fx:Script>
        <![CDATA[
            protected function btn1_clickHandler(event:MouseEvent):void
            {
                currentState="state2";
            }

            protected function btn2_clickHandler(event:MouseEvent):void
            {
                currentState="state3";
            }



        ]]>
    </fx:Script>

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>





    <s:states>
        <s:State name="state1"/>
        <s:State name="state2"/>
        <s:State name="state3"/>
    </s:states>


    <s:transitions>

        <s:Transition toState="state2" >
            <s:Parallel>

            <s:Move targets="{[btn1,btn2]}" />
            <s:AddAction targets="{[label1,label2,label3,textInput1,textInput2,textInput3]}" /> 
            <s:Fade targets="{[label1,label2,label3,textInput1,textInput2,textInput3]}"/>

            </s:Parallel>

        </s:Transition>
        <s:Transition toState="state3" >
            <s:Fade targets="{[label1,label2,label3,textInput1,textInput2,textInput3]}"/>

        </s:Transition>

    </s:transitions>


    <s:Label y="10" text="label1" id="label1" includeIn="state2" />
    <s:TextInput y="30" id="textInput1" includeIn="state2" />
    <s:Label y="50" text="label1" id="label2" includeIn="state2" />
    <s:TextInput y="70" id="textInput2" includeIn="state2" />
    <s:Label y="90" text="label1" id="label3" includeIn="state2" />
    <s:TextInput y="120" id="textInput3" includeIn="state2" />



    <s:Button y="180" y.state2="350" label="btn1" id="btn1" click="btn1_clickHandler(event)"/>
    <s:Button y="250" y.state2="550" label="btn2" id="btn2" click="btn2_clickHandler(event)"/>



</s:Application>

person FlyingCat    schedule 19.06.2010    source источник


Ответы (1)


Ваш пример кода выглядит неполным. Я думаю, нам нужно увидеть больше, чем просто состояние и переходы. ЕСЛИ вы можете предоставить полный рабочий образец, это было бы полезно.

Я предполагаю, что это пример проблемы, но в вашем текущем коде переходы toStates не создаются в документе. Поскольку у вас есть три состояния, вы можете добавить «fromState» и явно спроектировать переход из / в каждое состояние.

Если бы мне пришлось угадывать, вам, вероятно, нужно указать свойство includeIn для соответствующих компонентов. Вы можете использовать список состояний, разделенных запятыми, примерно так:

<s:Component includeIn="a" />
<s:Component includeIn="b,c" />
<s:Component includeIn="a,c" />

Там, где первый компонент появится в состоянии a, второй появится в состояниях b и c, а третий компонент появится в состояниях a и c.


Обновлен код плакатов:

    <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

    <fx:Script>
        <![CDATA[
            protected function btn1_clickHandler(event:MouseEvent):void
            {
                currentState="state2";
            }

            protected function btn2_clickHandler(event:MouseEvent):void
            {
                currentState="state3";
            }



        ]]>
    </fx:Script>

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>



    <s:states>
        <s:State name="state1"/>
        <s:State name="state2"/>
        <s:State name="state3"/>
    </s:states>


    <s:transitions>

        <s:Transition toState="state2" >
            <s:Parallel>

                <s:Move targets="{[btn1,btn2]}" />
                <!--<s:AddAction targets="{[label1,label2,label3,textInput1,textInput2,textInput3]}" /> -->
                <s:Fade targets="{[label1,label2,label3,textInput1,textInput2,textInput3]}" alphaFrom="0" alphaTo="1"/>

            </s:Parallel>

        </s:Transition>
        <s:Transition toState="state3" >
            <s:Parallel>
<!--                <s:Move targets="{[btn1,btn2]}" />-->
                <!--<s:RemoveAction targets="{[label1,label2,label3,textInput1,textInput2,textInput3]}" /> -->
                <s:Fade targets="{[label1,label2,label3,textInput1,textInput2,textInput3]}" alphaFrom="1" alphaTo="0"/>
            </s:Parallel>

        </s:Transition>

    </s:transitions>


    <s:Label y="10" text="label1" id="label1" includeIn="state2" />
    <s:TextInput y="30" id="textInput1" includeIn="state2" />
    <s:Label y="50" text="label2" id="label2" includeIn="state2" />
    <s:TextInput y="70" id="textInput2" includeIn="state2" />
    <s:Label y="90" text="label3" id="label3" includeIn="state2" />
    <s:TextInput y="120" id="textInput3" includeIn="state2" />



    <s:Button y="180" y.state2="350" includeIn="state1,state2,state3" label="To State 2" id="btn1" click="btn1_clickHandler(event)"/>
    <s:Button y="250" y.state2="550" includeIn="state1,state2,state3" label="To State 3" id="btn2" click="btn2_clickHandler(event)"/>



</s:Application>
person JeffryHouser    schedule 19.06.2010
comment
Спасибо. Я только что обновил свой код. У меня был свой includeIn в моем компоненте. Я даже удалил свой flex и переустановил, потому что думал, что это глюк flex ... Анимация полностью сбила меня с толку .. но +1 .. во-первых - person FlyingCat; 19.06.2010
comment
КСТАТИ. Все это странное поведение происходит только потому, что я добавляю цели ‹s:AddAction...› Если я удаляю одну из них, анимация работает правильно, за исключением того, что все они воспроизводятся одновременно... - person FlyingCat; 19.06.2010
comment
Можете ли вы предоставить исполняемый код для демонстрации проблемы? Например, ваши состояния определены как a, b и c, но компоненты ссылаются только на состояние с именем addRecommend и переходы. Когда я добавил состояние с именем addRecommend, я получил сообщение об ошибке, связанное с неопределенным свойством с именем dataGrid. - person JeffryHouser; 19.06.2010
comment
извините за путаницу. Я только что создал совершенно новые коды с тем же сценарием. Это проще и меньше кодов... смотрите обновление. Еще раз спасибо!!! - person FlyingCat; 19.06.2010
comment
Я добавил обновленный код в свой ответ. Я немного поиграл с этим; и вещи происходили странным образом непоследовательно по причинам, которые я не мог объяснить. Я указал alphaFrom и alphaTo на фейдах и указал состояния includeIn для двух кнопок, и все, казалось, начало работать. Поскольку вы делаете параллельный эффект, я не уверен, зачем вам нужен тег AddAction. Если вы хотите больше, вам придется уточнить, в чем заключалась ваша конкретная проблема. странно трудно отлаживать. - person JeffryHouser; 19.06.2010
comment
ух ты. Ты человек! Я следую вашим шагам, и теперь все работает нормально. Хотя я должен добавить includeIn=state1, state2, state3 в свои кнопки (как-то странно). Моя проблема заключалась в том, что когда я нажимаю кнопку btn2, чтобы изменить состояние, кнопка btn1 исчезает (btn1 должна быть во всех состояниях), и появляется одна из меток (не предполагается). Я должен использовать тег AddAction, потому что я хочу, чтобы затухание происходило после перемещения. Тег последовательности не поможет. Не могли бы вы объяснить, почему я должен включать все состояния, чтобы анимация работала? В любом случае, большое спасибо!!!!! - person FlyingCat; 19.06.2010
comment
Я смог воспроизвести то же самое, с исчезновением btn1 и появлением label3 в State3. У меня нет этому объяснения. Если вы хотите, чтобы после перемещения произошло исчезновение, должна работать последовательность. - person JeffryHouser; 19.06.2010