2016-10-30 1 views
0

저는 맞춤 구성 요소를 사용하고 있으며 상태가 언제 바뀌는지를 알 수 있어야합니다.상태 변경이 발생할 때 알려주는 UIComponent에 메서드가 있습니까?

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()이며 개인으로 표시되어 있습니다.

답변

1

당신은 대체 할 수 있습니다 구성 요소에 전달됩니다

보기를 입력했다 상태.

stateChangeComplete : 구성 요소가 새로운 상태 및 재생 완료되었는지의 상태에 대한 상태 전환 애니메이션 들어간 후

전달. 상태 사이에서 전환이 재생되지 않으면 즉시 이벤트가 으로 발송됩니다. 전환이 진행되는 동안 구성 요소가 다른 상태로 전환하면 구성 요소가 해당 새 상태로 전환을 완료 한 후이 이벤트가 전달됩니다.

0

확장 할 수있는 UIComponent.stageChanged() 방법이있다처럼 보이는 : 상태 고유의 스타일이 구성 요소에 적용 여부 상태 변경이 확인 될 때 ​​

가이 메소드가 불려가. 현재 상태에 대해 일치하는 CSS 의사 셀렉터가 인 경우이 인스턴스의 경우 캐시를 다시 생성해야하고 매개 변수가 true으로 설정된 경우 모두 자식이 될 수 있습니다.

는 AS :

protected function stateChanged(oldState:String, newState:String, recursive:Boolean):void

그리고 당신은 enterState 같은 다른 이벤트가 :

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); 
    } 
} 
관련 문제