Flex中的状态转换

时间:2010-01-11 16:39:17

标签: flex flex3

我有一个具有2个状态的flex组件 - “”(即没有名称/默认值)和“Transactional” - 以及一组从一个状态移动到另一个状态的转换。

有一个按钮可以在两个状态之间切换,点击时调用以下功能

public function ToggleState():void
{
    if (this.currentState=="Transactional")
    {
        this.currentState = "";
    }
    else
    {
        this.currentState = "Transactional";
    }

}

除非您在组件从一个状态更改为另一个状态时单击按钮,否则一切都按预期工作。事情开始变得奇怪 - 一些以前会消失的组件,不再消失。其他人不再重新出现

我怀疑这是因为转换没有正确完成,所以动画组件的属性没有正确地重置为正确的值。

我试图进行一些检查以判断状态是否正在改变(因此在转换过程中禁用按钮)但是我能找到的唯一可以听到的事件是

enterState
currentStateChange
currentStateChanging

所有这些都在转换完成之前被触发。

有没有人知道任何其他合适的事件要听,或者更好的方式来改变状态?

更新:

这是我用于过渡的mxml

<transitions>
    <mx:Transition fromState="" toState="Transactional">
        <mx:Sequence>
            <mx:Parallel>
                <mx:AnimateProperty target="{Controller}" property="y" fromValue="-60" toValue="-1" duration="600" />
                <mx:AnimateProperty target="{Environment}" property="y" fromValue="156" toValue="46" />
                <mx:AnimateProperty target="{ProfitAndLoss}" property="y" fromValue="156" toValue="126" />
                <mx:AnimateProperty target="{Summary}" property="y" fromValue="156" toValue="56" />
                <mx:AnimateProperty target="{Assets_Container}" property="x" fromValue="266" toValue="246" />
                <mx:AnimateProperty target="{Liabilities_Container}" property="x" fromValue="425" toValue="505" />
                <mx:Fade target="{TransactionalBackgroundImage}" alphaFrom="0" alphaTo="1" />
            </mx:Parallel>
            <mx:AnimateProperty target="{Summary}" property="x" fromValue="42" toValue="256" />
        </mx:Sequence>
    </mx:Transition>
    <mx:Transition fromState="Transactional" toState="">
        <mx:Sequence>
            <mx:AnimateProperty target="{Summary}" property="x" fromValue="256" toValue="42" />
            <mx:Parallel>
                <mx:AnimateProperty target="{Controller}" property="y" fromValue="-1" toValue="-60" />
                <mx:AnimateProperty target="{Environment}" property="y" toValue="156" fromValue="46" />
                <mx:AnimateProperty target="{ProfitAndLoss}" property="y" toValue="156" fromValue="126" />
                <mx:AnimateProperty target="{Summary}" property="y" toValue="156" fromValue="56" />
                <mx:AnimateProperty target="{Assets_Container}" property="x" fromValue="246" toValue="266" />
                <mx:AnimateProperty target="{Liabilities_Container}" property="x" fromValue="505" toValue="425" />
                <mx:Fade target="{TransactionalBackgroundImage}" alphaFrom="0" alphaTo="0" />
            </mx:Parallel>
        </mx:Sequence>
    </mx:Transition>
</transitions>

1 个答案:

答案 0 :(得分:1)

currentState属性立即改变,我很确定这是导致麻烦的转换(在那里,做到了;-)。如果单击太快,则会有两个同时运行的效果更改同一组值,从而产生未定义的结果。此外,效果上的effectEnd事件处理程序将在另一个运行效果的中间触发。您可以尝试效果实例上的end()方法,在开始下一个效果之前立即结束效果,这也会将所有属性设置为最终值并触发effectEnd。如果这没有帮助,你可以发布一些效果代码吗?