UIComponent之currentStateChange事件
在使用State的时候,我总是会选择enterState和exitState事件来处理state切换问题(enterState总是在state切换完毕再抛出,这点很便利),可是最近发现一问题,enterState和exitState实际是抛出FlexEvent对象,此对象不包含上一个state和请求的state的信息,也就是说,你也不会知道你是从哪个state切换过来的,对于某些特别的request来说不是很爽。
于是我查了下UIComponent的源码,发现UIComponent带有两个很好用的事件:
- currentStateChange
- currentStateChanging
在UIComponent的commitCurrentState方法(private)里,还能找到这两个事件,以及enterState,exitState抛出的顺序:
- currentStateChanging
- exitState
- enterState
- currentStateChange
从这里不难发现flex framework对于state的处理机制,首当其冲便是currentState property,它存储着state信息。切换的时候,首先抛出currentStateChanging事件,说明切换开始,然后执行“移除”当前state,抛出exitState(至此state被移除),然后切换到新的state,完成后抛出enterState,接着抛出currentStateChange事件,currentState修改完毕。
并且我们可以注意到,currentStateChange抛出的是StateChangeEvent事件对象,此对象带有oldState和newState property,恰好弥补了enterState和exitState的不足。

