我正在使用自定义组件,我需要能够判断状态何时发生变化。
为StateChangeEvent.CURRENT_STATE_CHANGE
添加事件监听器是监听状态更改的唯一方法,还是有可以覆盖的方法?
public function MyComponent() extends SkinnableComponent {
public function MyComponent() {
addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, onCurrentStateChange);
}
private function onCurrentStateChange(event:StateChangeEvent):void {
//invalidateSkinState();
}
}
我查看了UIComponent.commitCurrentState()
(调度事件的地方),并将其标记为私有。
答案 0 :(得分:1)
您可以覆盖:
protected function stateChanged(oldState:String, newState:String, recursive:Boolean):void
您还有其他活动,例如enterState
:
在组件进入视图状态后调度。
在组件进入新状态和任何状态后调度 过渡动画到该状态已经完成播放。活动是 如果之间没有过渡,则立即派遣 状态。如果组件切换到不同的状态而 过渡期正在进行中,此事件将在之后发送 组件完成向新状态的转换。
答案 1 :(得分:0)
看起来有一个UIComponent.stageChanged()
方法可以扩展:
当状态改变以检查是否时调用此方法 特定于州的样式适用于此组件。如果有机会的话 一个匹配的CSS伪选择器,用于当前状态,样式 需要为此实例重新生成缓存,并且可能全部重新生成缓存 子项,如果
recursive
参数设置为true
。
AS:
protected function stateChanged(oldState:String, newState:String, recursive:Boolean):void
{
// This test only checks for pseudo conditions on the subject of the selector.
// Pseudo conditions on ancestor selectors are not detected - eg:
// List ScrollBar:inactive #track
// The track styles will not change when the scrollbar is in the inactive state.
if (currentCSSState && oldState != newState &&
(styleManager.hasPseudoCondition(oldState) ||
styleManager.hasPseudoCondition(newState)))
{
regenerateStyleCache(recursive);
initThemeColor();
styleChanged(null);
notifyStyleChangeInChildren(null, recursive);
}
}