apache-flex UIComponent中是否有一个方法可以告知何时发生状态更改?

pbwdgjma  于 2022-11-01  发布在  Apache
关注(0)|答案(2)|浏览(111)

我正在使用一个自定义组件,我需要能够知道状态何时更改。
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()(事件被调度的位置),它被标记为private。

v8wbuo2f

v8wbuo2f1#

您可以覆写:
enterState
还有其他事件,如enterState
在组件进入视图状态后调度。
stateChangeComplete
在组件进入新状态并且播放完转换到该状态的任何状态转换动画后调度。如果状态之间没有播放转换,则立即调度该事件。如果转换正在进行时组件切换到其他状态,则在组件完成转换到该新状态后调度此事件。

91zkwejq

91zkwejq2#

看起来有一个可以扩展的UIComponent.stageChanged()方法:
当状态更改时调用此方法,以检查特定于状态的样式是否应用于此组件。如果当前状态有可能存在匹配的CSS伪选择器,则需要为此示例重新生成样式缓存,如果recursive参数设置为true,则可能需要为所有子项重新生成样式缓存。
助理秘书长:

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);
    }
}

相关问题