googleAdsense_widever


flex :: creationpolicy FLEX/Flash

복수 개의 child 를 가지고 있는 components에서 application이 실행된 후 클릭등으로 화면에 나타나지 않은 index 내부에 있는 컴포넌트의 속성을 조작할 수는 없다.

component의 id가 할당되는 시점은 화면에 표현되는 creationComplete가 이루어져야하기 때문이다.
initialize는 그 이전이다.

이를 해소하기 위해 스크립트로 접근하려는 컨트롤이 있는 child index로 이동한 뒤, creationComplete 이벤트에 해당 컨트롤로 접근하는 코드가 있는 함수를 등록하면 될터인데, 실제로 제대로 작동하지 않는 경우가 있다.

사용자 이벤트가 아닌 스크립트로 focus를 이동하는 것에는 creationComplete가 제대로 이루어지지 않거나, id할당이 안되는 것 같다.

하지만 creationpolicy 속성을 변경하면 해당컴포넌트의 자식이 생성완료되는 시점을 변경할 수 있는데,
부모 component의 creationpolicy를 all로 설정해두면 부모 컴포넌트가 생성될 때, 자식 컴포넌트도 creationComplete까지 생성이 완료되어, id접근이 가능해진다.

단, creationpolicy 속성은 상속되지 않기 때문에, 자식 컴포넌트 내부의 컨트롤 id를 애플리케이션 실행시에 바로 할당시키려면,
부모컴포넌트와 자식컴포넌트 모두의 creationpolicy를 all로 설정해두어야 한다.

이 속성의 기본값은 'auto'이며, 필요이전 까지는 자식을 생성하지 않아서 초기로딩 시간을 단축시킨다.

이보다 더 좋은 방법은 스크립트로 특정 컴포넌트를 creationComplete까지 완료시키는 함수일텐데, 뭔지 모르겠다..








<추가>

위 링크는 flex에 관한 포스트를 찾다보면 자주 방문하게 되는 블로그다.
해당 페이지에 보면 creationPolicy에 대한 의견이 나오면서, IndexChangeEvent 에 대한 언급을 볼 수 있는데
이건 정확한 해결방법은 역시나 아니다.

다만, container.selectedIndex = setIdx; 에 잇따른 해당 index canvas 내부의 component 호출이 불가능 하던 것을
indexChangeEvent 이벤트로 정확히 수신한 뒤, 처리할 수 있는 방법은 가능하겠다.
즉, component 조작을 indexChangeEvent 에 등록하여, 해당 index의 creationComplete 이후에 제대로 함수가 작동하도록 만드는 것이다.

하지만, 정말, 이게 최선인가?
애플리케이션이 가벼우냐 무거우냐는 전체 UI와 스크립트 용량이 결정하는 것이지, 동적로딩이 얼마나 잘 이루어지는가가 결정하는게 아니다.

게임에서 초기 로딩이 아무리 빨라도, 맵을 조금 이동할 때마다 진입로딩이 추가로 끼어든다고 생각해보면 될 것이다.
컴퓨터 자원에 그닥 문제가 없는 사람에게 그건 정말 최악의 구성이다.

플래시는 애초에 자원소모를 그렇게 따지지 않는다. 자바진영이 원래 그러니까.

이러한 문제에 있어서 가장 최선의 해결책은 위와 같은 문제를 발생시키는, 스크립트로 Data를 받아서 view를 시행하는 컴포넌트가 있는 컨테이너의 index는 creationPolicy='all'로 모두 설정하고, 그럴 필요가 없는 부분에 대해서는 기본값을 그대로 사용하는 것이다.

적어도 생성 대기중인 컴포넌트를 creationComplete하는 메소드만 알아도 이렇게 따질 일은 없을텐데 말이지.

뭔가 플렉스로 코딩을 하다보면 물가에 내어놓은 자식새끼마냥 불안불안하다. 이걸보면 아, 역시 script 언어구나. 하는걸 느낀다.
하지만 플렉스를 꼭 필요로하는 딱, 입맛에 맞는 프로젝트가 있고, 그곳에서 가장 적절한 역할을 하고있는 것 또한 사실이다.

웹에서의 VB라고나 할까?
사실 난 VB를 찬양한다.

덧글

  • 퍼플린 2011/01/28 14:58 # 삭제 답글

    creationPolicy = 'all' 의 경우는 블로그에서는 indexChange를 사용하자라고 했지만 실제로는 all 로 쓰는 경우가 꽤 많이 생기게 됩니다.

    이야기 하신것 처럼 게임중간에 로딩이 끼어드는 것 처럼 되버리는 경우가 있고. 데이터를 한번에 받아와서 전부 할당한다거나.. 프로그램적으로 알아서 탭을 변경하는 경우에는 이벤트를 처리 해줘야 하는게 여간 복잡해지기도 해서 그냥 all로 사용하게 되는거죠.

    필요할때 강제로 완성한다거나 몇몇 컴포넌트만 미리 완성한다거나 하는게 있음 좀더 효율적이 될것도 같은데 말이죠 -ㅅ-;
  • Fredric Cliver 2011/01/29 07:44 #

    네! 정말 컴포넌트를 script 영역에서 강제로 완성시키는 메소드가 있었으면 좋겠습니다..
    그런게 없을리가 없어야 할텐데.. 정녕 없는건지;;
    사실 동적로딩이 잘 이루어지기만 하면 필요없는 리소스 절약도 되고 상당히 좋은데요..
    creationPolicy는 최후의 보룬데 말이죠...
댓글 입력 영역


공지

어서오십시오.
트위터 : @FCliver
기저심리학 : 네이버카페
카카오톡 : FCliver
페이스북 : Fredric Cliver

통계 위젯 (화이트)

123
50
288485

접속자 위치