11.12.处理StateChange 事件

11.12.1. 问题
我想了解和states 改变时所关联的事件。
11.12.2. 解决办法
添加trace 语句到ENTER_STATE 事件和子组件的CREATION_COMPLETE 事件中,来显示当进入state 子组件何时被创建,离开state 组件何时被移除,但不是删除。
11.12.3. 讨论
当state 改变时有一系列事件会发生,看起来有点复杂。State 自身广播的事件有从子组件发出的creation, addedToStage, and removedFromStage 事件。当State 对象被创建,进入,离开时有下列不同类型的事件触发:
mx.events.StateChangeEvent.CURRENT_STATE_CHANGE
定义当视图状态更改时调度的事件的type 属性的值

mx.events.StateChangeEvent.CURRENT_STATE_CHANGING
定义当视图状态将要更改时调度的事件的type 属性值

State 事件有:
mx.events.FlexEvent.ENTER_STATE
当进入视图状态时调度。这个事件是在基础视图状态改变后触发

mx.events.FlexEvent.EXIT_STATE
在离开视图状态前调度。这个事件是在基础视图状态被移除前触发

子组件事件有:
mx.events.FlexEvent.ADD
当组件通过addChild 或addChildAt 方法添加到容器作为子控件时触发。

mx.events.FlexEvent.REMOVE
当组件通过removeChild 或removeChildAt 方法从容器中移除时触发。

mx.events.FlexEvent.PREINITIALIZE
当组件按顺序初始化前触发

mx.events.FlexEvent.INITIALIZE
当组件完成构造和设置所有属性后触发。

mx.events.FlexEvent.CREATION_COMPLETE
当组件完成构造,属性处理,计算尺寸,布局和绘制后触发。

当一个组件从基础state(组件被创建时的状态)转换到第二个state 时,事件的触发顺序是这样的:
[child] constructor()
[component] CURRENT_STATE_CHANGING;
[child] ADD;
[child] PREINITIALIZE;
[child] createChildren();
[child] INITIALIZE;
[state] ENTER_STATE; (second state)
[component] CURRENT_STATE_CHANGE;
[child] commitProperties();
[child] updateDisplayList();
[child] CREATION_COMPLETE;


当组件从第二个state 转换到基础state 时,事件的顺序和方法调用顺序是这样的:
[component] CURRENT_STATE_CHANGING;
[state] EXIT_STATE; (second state)
[child] REMOVE;
[component] CURRENT_STATE_CHANGE;


当组件再次回到第二个state 时:
[component] CURRENT_STATE_CHANGING;
[child] ADD;
[state] ENTER_STATE; (second state)
[component] CURRENT_STATE_CHANGE;
[child] updateDisplayList();

我们注意到组件第一次进入第二个state 和第二次进入第二个state 时是不一样的,子组件没有被重建,只是简单的被重新添加进来。

加支付宝好友偷能量挖...


评论(0)网络
阅读(104)喜欢(0)flash/flex/fcs/AIR