2009-08-26 2 views
0

하위 구성 요소의 데이터 매개 변수에 상위 구성 요소의 설정자를 통해 할당을 전파하려고합니다. 이와 같이 :Flex 3 : 액션 스크립트 블록의 MXML 구성 요소에서 하위 구성 요소에 대한 데이터 할당이 실패합니다.

<CustomComponent 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns="components.*" 
    > 
    <mx:Script> 
     <![CDATA[ 
      public override function set data(val:Object):void 
      { 
       super.data = val; 

       subComponent.data = val; //ref #1 
      } 
     ]]> 
    </mx:Script> 
    <CustomSubComponent id="subComponent" 
     /> 
</CustomComponent> 

응용 프로그램을 실행할 때 하위 구성 요소는 절대로 데이터를받지 못했습니다. "ref # 1"로 표시된 라인을 디버깅하고 스테핑 할 때, 디버거는 메소드에서 벗어나 메소드가 완료된 것처럼 계속 진행합니다. 그것은 약간의 예외 또는 오류가 던져진 것처럼 보이지만 콘솔은이 과제에서 무엇이 잘못되었는지를 알려주지 않습니다.

내가 바보 같은 짓을하고 있니? 꽤 똑바로 보인다.

환경 : Windows에서 이클립스 용 플렉스 빌더 3 플러그인과 플래시 9 디버그 버전이있는 플렉스 SDK 3.2를 사용하고 있습니다. IE7 용.

참고 :이 특정 예에서는 바인딩을 피하려고합니다. 내 말은, 왜 데이터를 바인딩하기보다는 수동으로 하위 구성 요소로 푸시 할 수 없습니까?

답변

2

플렉스 데이터 세터의 내부 오류를 억제하는 데 도움이 바랍니다. 문제는 아마도 데이터가 호출 될 때 하위 구성 요소가 초기화되지 않았기 때문일 수 있습니다. 정말 쉽고 깨끗한 바인딩을 사용할 수 없다면 invalidateProperties/commitProperties로 초기화 될 때까지 하위 구성 요소의 데이터 설정을 지연해야합니다.

데이터 세터에서 invalidateProperties()를 호출하고 변경되었음을 나타내는 플래그를 설정합니다.

커밋 프로퍼티를 오버라이드하고 (슈퍼를 잊지 말것) 플래그를 확인하고, 사실이면 하위 구성 요소의 데이터를 설정하십시오.

commitProperties 블록이 호출되지 않는 경우 creationComplete에서 invalidateProperties를 시도하십시오.

0

맞춤 구성 요소 및 하위 구성 요소는 어떤 구성 요소입니까? 그들은 무엇을 연장합니까?

저는 HBox와 VBox를 확장하는 기본 예제를 시도해 보았습니다.

here 소스보기를 사용 설정 한 결과를 볼 수 있습니다.

디스플레이 목록에 추가 된 구성 요소가 확장되어 측정/데이터/등을 확인하기위한 수명주기가 일부이기 때문에 아무런 문제가 없다고 생각합니다. 물건을 자주 널이기 때문에

, 그것은

+0

내 모든 맞춤 구성 요소는 캔버스입니다. – DyreSchlock

+0

절대 위치 지정이 정말로 필요합니까? 나는 절대 컨테이너가 상대 컨테이너와 반대되는 방식으로 계층 구조가 업데이트되지 않는다고 생각합니다. 업데이트 된 방법을 재정의 할 수 있어야합니다. 도움이된다면 나중에 집에서 보게 될 것입니다. –