2010-02-15 5 views

답변

8

첫째, 100 %는 EffectiveUI하여 프리젠 테이션을 공부하는 것이 좋습니다 :

이를 Michael Labriola에 의해 Digital Primates에서 :

그들은 문서에서 결코 찾을 수없는 것들을 다루지 만 Flex 구성 요소 라이프 사이클을 이해하는 데 매우 유용합니다.

내 경험에 비추어 볼 때, 핵심 라이프 사이클 메소드를 재정의 할 때 걱정할 필요가있는 유일한 시간은 구성 요소를 만드는 경우입니다. 나는 의 응용 프로그램보기구성 요소을 구별합니다.

  • 구성 요소는 거의 완벽해야하고, 고도로 최적화되고, 매우 다목적/추상이어야합니다.
  • 보기는 하나의 응용 프로그램에서만 필요할 수 있지만 원하는 경우 재사용 할 수 있습니다 (LoginScreen, ContactForm 등).

대부분의 경우보기는 더 일반적인 구성 요소 (캔버스, 그룹, 컨테이너, VBox, 목록 등)의 표시 목록에 추가하는 것입니다. 당신은 View/Application 개발자로서, "dataProvider"가 itemRenderers를 만드는 방법에 대해 정말로 신경 쓰지 않아도 작동합니다.

구성 요소는 다른 이야기입니다. 컴포넌트를 생성 할 때 Flex가 설정 한 시스템 인 Component Lifecycle에 완벽하게 적용되기를 원합니다. 처음에는 구성 요소를 만들려고 할 때 꽤 힘들지만 머리를 감싸고 나면 쉽게 끝납니다. 구성 요소가

  • 호출 탑을 건설 할 때

    에 createChildren()

    1. 한 번 호출 : 나는 방법을 생각 어떻게 구성 요소을 개발할 때 여기. 따라서 PanelcreateChildren이라면 createChildren 메서드는 initialize을 호출하는 createChildren을 호출하는 모든 자식에 addChild 메서드를 호출합니다.

    구성 요소를 만든 경우, StarRatingComponent를 작성한 경우 구성 요소를 만들 때 스테이지에 5 개의 별을 추가 할 수 있습니다. 따라서 현재 구성 요소에 별을 추가하려면 createChildren()을 무시하십시오.하지만 기본적으로 Flex SDK의 모든 컨테이너 구성 요소는 자식을 여기에 추가합니다 (목록이 약간 다름). 따라서 MXML 뷰를 만들거나 extremeley를 재사용 할 수없는 경우에는이 작업을 수행 할 필요가 없습니다 .

    다음 3 개의 메소드는 속성이 설정된 후 1 프레임이라고합니다.

    측정()

    1. 부모가 어떤 크기 (백분율 또는 명시 적)가없는 경우, 그것은 필요는 그것의 아이들의 크기에 따라 크기를합니다. 이것은 밑바닥부터 일어날 수 있습니다 (내 머리를 감싸 주려면 꽤 오래 걸렸습니다).
    2. 부모가 명시 적 또는 백분율 크기 인 경우이 단계를 건너 뜁니다.

    당신이 원하는 경우 measure를 오버라이드 (override) :

    1. measuredWidth이 있거나 유용한 값을 반환 measuredHeight. 따라서 사용자 정의 CoverFlowContainer 구성 요소를 빌드하고 measuredWidth/measuredHeight이 설정되지 않은 경우 (measure이 재정의되지 않았으므로) CoverFlowContainer에서 크기를 지정하지 않으면 0 높이 0이됩니다. 그래서 measure을 덮어 쓰고 measuredWidthradius * 2 또는 그와 비슷한 것으로 설정하면 크기를 줄 필요가 없습니다.
    2. 구성 요소에 명시 적 또는 비율 크기가없는 경우 측정 값을 사용하여 구성 요소의 크기를 지정합니다. 그렇지 않으면 건너 뜁니다.

    의 commitProperties measure 후에 호출

    1. .
    2. 구성 요소의 속성 설정에서부터 구성 요소 (모든 구성 요소가 첫 번째 프레임의 전용 변수에 저장 됨)에 모든 속성 변경 내용을 적용합니다.
    3. 초기 속성 설정 후에 프레임이 호출됩니다.

    제 생각에는 무시하는 것이 가장 중요한 방법입니다. 따라서 CoverFlowContainer에 대해 가상의 distance, gap, selectedItemtilt 속성을 설정한다고 가정 해보십시오. 설정시 private 변수에 저장하십시오. Flex는 프레임을 대기하고 commitProperties으로 호출합니다. 재정의 한 commitProperties에서는 layout.updateEverything(selectedItem, distance, gap, tilt);라고 말하면됩니다. 따라서 이것은 모든 속성 변경을 한 번에 적용하도록 재정의하는 방법입니다.

    은 updateDisplayList은

    1. 위에서 아래로 호출 commitProperties
    2. 후에 호출됩니다.
    에만이 구성 요소에 표시 속성을 설정하는 오버라이드 (override)

    , 등 setActualSize, graphics, 그러나 (때문에의 commitProperties`의), 오른쪽으로 설정 디스플레이를 업데이트하기 위해 모든 필요한 변수가 지금 쯤은 값.

    전반적으로 나는 백만 프로젝트에 사용할 것입니다 것들에 대한 구성 요소 라이브러리를 만들 때, 나는이 수명주기 방법으로 많은 일을 나의 경험에서 그래서

    :

    • TitleWindow (내 자신의 버전)
    • View3D (플렉스 4
    • 텍스트 영역에 대한 Away3D/Papervision)
    • 트리와 스택 (와 프롬프트, 확장 등)
    • 도구 설명 (피부 툴팁에 쉽게)

    나는 확실히 모든 업데이트 및 라이프 사이클에 따라 완벽하게 렌더링 된 만들 필요가 있었다. Flex 4 Spark Source Code을 읽고 이해하면 이러한 방법을 재정의 할 때 명확히 알 수 있습니다. Openflux Source Code (Flex 프레임 워크에 대한 매우 단순하고 명확한 대안으로서 기능이 풍부하지 않으므로 일부 고급 작업을 수행하기 위해 해당 메서드를 맨 손으로 겹쳐 쓰는 방법을 보여줍니다.) 나는 응용 프로그램을 개발하고 AdvertismentView, MenuViewLoginView 같은 일을 할 때 내가 사용하는 모든 구성 요소가 이미 이러한 문제 (는, ViewStack, 그룹, 목록 등)을 해결했기 때문에, 나는 지금까지 그것에 대해

    을 생각하지 않습니다. 기본적으로 정의한 속성을 설정하고 자신의 commitProperties 재정의로 업데이트했습니다.

    보기에서 수명주기 메서드를 재정의하기 시작하는 유일한 방법은보기 외부에서 사용자 지정 변수에 액세스해야하는 경우입니다. 그래서 사용자 지정 RichTextEditor가 있고 showFontControlsshowStylePanel이라는 몇 가지 속성을 만들었습니다. 이러한 변수를 설정하면 Data Binding Presentation에 설명 된대로 액세서가 개인 변수를 설정하고 유효하지 않은 메서드를 호출하고 라이프 사이클 메서드가 프레임을 나중에 실행하며 이러한 패널과 글꼴을 표시하기 위해 commitPropertiesupdateDisplayList을 재정의했습니다. 하지만 실제로는 과도한 작업 일수록 성능 향상에 도움이되지 않을 것이므로 과장 할 것입니다. 그 경우에는 visible 속성에 바인딩을 설정하기 만하면됩니다. 그럼에도 불구하고 ...

    실제로이 작업을 수행하는 가장 좋은 방법은 Flex SDK Source을 다운로드하고 수행중인 작업을 확인하는 것입니다.

    희망이 있습니다.

    랜스

  • +0

    우수한 고장. 특히 구성 요소와 뷰를 구별하는 방법이 특히 좋습니다. –

    관련 문제