2010-01-04 9 views
1

모든 사용자 지정 구성 요소가 확장하는 클래스로 사용하고있는 BaseComponentClass가 있습니다. 어떤 이유로 든 내 사용자 지정 구성 요소가 런타임에 표시되지 않습니다. 어떤 컴파일이나 런타임 오류도 발생하지 않습니다. 보호 된 UIComponent 메서드를 모두 구현하고 있습니다. 내 코드는 다음과 같습니다 UIComponent 기본 클래스가 작동하지 않습니다.

public class BaseComponentClass extends UIComponent 
{ 
    public function BaseComponentClass() 
    { 
     super(); 
    } 

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
    { 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 
    }  

    override protected function createChildren():void 
    { 
     super.createChildren(); 

     for (var i:uint=0; i < super.numChildren; i++) 
     { 
      var childObj:DisplayObject = super.getChildAt(i); 
      addChild(childObj); 
     }   
    } 

    override protected function commitProperties():void 
    { 
     super.commitProperties(); 
    } 

    override protected function measure():void 
    { 
     super.measure(); 
    } 
} 

그럼 내가 어느 정도 이런 식으로 내 MXML의 사용자 정의 구성 요소의 기본 클래스로 사용 :

<local:BaseComponentClass xmlns:local="local.com.*" xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:Button id="btn" label="My Button" /> 
</local:BaseComponentClass> 

버튼을 런타임에 나타 없습니다.

+0

보호 된 메서드를 재정의하지 않으면 (현재 추가 작업을 수행하지 않으므로) 어떻게됩니까? –

+0

아무 반응이 없습니다. 위에서 설명한 문제는 여전히 남아 있습니다. – CodeQrius

답변

1

분명히 BaseComponent에 하위 개체를 추가하려고합니다.

왜이 기능을 지원하는 클래스 (예 : 상자 또는 캔버스)에서 상속하지 않습니까?

+0

나는 그 일을 생각했지만 UIComponent를 기본으로 사용하는 것에 비해 플렉스 어플을 더 무겁게 만들 수 있을지 궁금해하고있었습니다. – CodeQrius

+0

왜 기본 클래스가 필요합니까? UI 구성 요소의 일부가 아니며 위에 표시되지 않은 구성 요소의 공유 코드는 무엇입니까? 어쩌면 또 다른 방법이있을 것입니다. 그렇지 않으면 컨테이너 클래스를 기본 클래스로 사용하면 자동 레이아웃과 같은 기능을 갖춘 이미 기능이있는 컨테이너의 모든 이점을 얻을 수 있습니다. – Stefan

0

해당 구성 요소의 너비와 높이를 설정하려고 했습니까? 기본 UIComponent를 너비와 높이로

당신이 여기 기본값 설명서를 볼 수 0

로 설정하고 기본 구성 요소에 따라 변경됩니다 http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html

행운을 빕니다!

+0

예. 나는 그랬다. 너비와 높이가 플렉스 앱에 적용되었지만 버튼이 표시되지 않았습니다. – CodeQrius

0

모범 사례가 확실하지 않으므로이를 구현하기 전에 조사해보아야합니다.하지만 배열 속성 (자식 요소는 uicomponent에서 사용할 수 있음)을 만든 다음 클래스의 어딘가에 defaultProperty 메타 데이터 태그 ([DefaultProperty ("children")]).

코드를 디버그하고 for 루프에 중단 점을 넣는 경우에는 addChild 코드를 사용하지 마십시오. 사실 createChildren (uiComponent.createChildren)의 정의 (f3)로 이동하면 빈 상태가됩니다. 생성 한 기본 속성 설정자에서 addChild를 명시 적으로 호출해야합니다. 더 좋은 방법은, 항상이 컴포넌트를 컨테이너와 같은 클래스로 사용한다면 Container를 확장하는 것입니다. 모범 사례에 대한 느낌을 얻기 위해 F3을 해당 수업에 적용합니다.

관련 문제