flash - actionscript doc




플렉스 요소 includein (2)

Flex에서는 다음을 통해 요소에 상태를 할당 할 수 있습니다.

<s:Button id="mybtn" includeIn="mystate" label="button label"/>

ActionScript에서 includeIn 을 어떻게 할 수 있습니까?

고맙습니다.


상태는 AS 개념이 아닌 MXML 개념입니다. AS에서는 재정의 함수 currentState에 자신의 논리를 작성해야합니다.

override public function set currentState(value:String):void
{
  super.currentState = value;
  //write your logic for states
}

includeIn 의사 속성은 MXML 언어에만 존재합니다. 나는 속성이나 스타일 (예제의 Button 클래스)에 매핑되지 않기 때문에 이것을 가상 속성이라고 부릅니다.

대신 오래된 mx AddItems 태그의 약식 표기법입니다. 이 구문에서 예제는 다음과 같습니다.

<mx:states>
    <mx:State name="normal"/>
    <mx:State name="mystate">
        <mx:AddItems items="{mybtn}"/>
    </mx:State>
</mx:states>

<mx:Button id="mybtn"/>

includeIn 에 대해 생성 된 ActionScript 코드가 매우 유사하기 때문에 이에 대해 언급합니다. 이것은 다음과 같습니다.

states = [
    new State ({
        name: "normal",
        overrides: []
    }),
    new State ({
        name: "mystate",
        overrides: [
          new AddItems().initializeFromObject({
            itemsFactory: _TestFlex_Button1_factory,
            destination: null,
            position: "first"
          })
        ]
    })
];

차이점은 버튼을 인스턴스화하기 위해 팩토리를 사용한다는 것입니다.
MXML 코드에서 생성 된 ActionScript 코드에 관심이있는 경우에는 keep-generated-actionscript 플래그를 컴파일러에 전달하여 간단하게 살펴볼 수 있습니다 ( mxmlc 컴파일러 옵션 참조).

물론 '수동으로'논리를 쓰고 싶다면 setCurrentState () 를 재정의하거나 CURRENT_STATE_CHANGE 이벤트를 수신하는 것이 더 쉬울 수 있으며, 값에 따라 addElement() 또는 removeElement() 호출하는 것이 더 쉽습니다. currentState .