2010-08-05 5 views
1

나는 이것이 내가 원하는 것임을 확신하지만, 어떤 이유로 작동하지는 않는다. 캔버스를 확장하는 임의의 구성 요소를 호출하고 싶습니다. TestCanvasA, TestCanvasC, TestCanvasC라는 다양한 구성 요소가있을 수 있기 때문에 실행 시간까지 알 수 없으므로이 방법을 생각해 볼 수 있습니다. 여기에 내가 가진 것이있다.AddChild를 Flex에서 Dynamic DispalyObject로 사용

<mx:Script> 
    <![CDATA[ 
     import component.TestCanvas; 
     import mx.containers.Canvas; 
     import flash.display.Sprite; 
     import flash.utils.getDefinitionByName; 

     private function init(evt:Event):void{ 
      var Type:String="TestCanvas"; 
      var controlClass:Class = getDefinitionByName(Type) as Class; 
      this.addChild(new controlClass() as Canvas); 
     } 
    ]]> 
</mx:Script> 

멋진 아이디어가 될 것입니다. 응용 프로그램 내부의 클래스에 대한 참조가없는 한

var type:String="component.TestCanvas"; 
var controlClass:Class = getDefinitionByName(Type) as Class; 

은 또한 단순한 import 문은 컴파일 된 SWF에서 클래스의 정의를 포함 할 필요는 없다 :

+0

"작동하지 않는다"는 것을 설명 할 수 있습니까? 오류가 발생하면 오류를 게시하지 않았습니까? 그렇지 않은 경우 [디버그 버전의 플래시 플레이어] (http://www.adobe.com/support/flashplayer/downloads.html)를 설치 한 후 다시 시도하여 오류가 누락되지 않았는지 확인하십시오. – Amarghosh

+0

사실 그것은 잘 작동했습니다. 내 문제는 외부 SWC에서 클래스에로드하고 클래스가 인식되지 않는 경우입니다. 클래스를 가져 와서 선언 한 SWC의 다른 클래스를로드하여 작동하도록했습니다. 그럼 난 그냥 그것이 완전히로드되었는지 확인하고 getDefinitionByName()를 다시 만났습니다! 다시 한번 감사드립니다! – abritez

답변

1

것은 그것을 정규화 된 클래스 이름을 지정합니다. SWF의 어딘가에 해당 유형의 변수를 선언 (초기화하지 않아도 됨)하면 정의가 실제로 포함되었는지 확인할 수 있습니다.

var dummy:TestCanvas; 
+0

저에게 다시 연락 주셔서 감사합니다.하지만 불행히도 그 방법은 효과가 없습니다. 내가 뭘하려고하는지 더 잘 알기 위해서. 다른 사람이 mxml 파일로 구성된 임의의 템플릿 파일을 추가 할 외부 라이브러리를 만들고 싶습니다. 내가 상상하는 방식은 Canvas에서 상속받은 mxml 파일의 이름을 제외하고는 알 수 없다는 것입니다. 런타임 중에 config 파일을로드하여 mxml "템플릿"의 이름을 식별하고 addChild를 사용하여 스테이지에 추가합니다. 그게 합리적인지 아니면 내가 뭔가 잘못하고 있는지 알려줘. 감사! 정말 감사! – abritez