2009-07-21 3 views
4

Flash CS4에서 작은 구성 요소를 만들었으며 MyComp 심볼을 해당 MyComp 클래스와 연결했습니다. Flash CS4 - 구성 요소 관리자, 속성은 항상 null입니까?

package { 
    import flash.display.MovieClip; 

    public class MyComp extends MovieClip 
    { 
     public function MyComp() 
     { 
      trace(this.test); 
     } 

     private var _test:String; 

     [Inspectable(defaultValue="blah")] 
     public function get test():String 
     { 
      return this._test; 
     } 

     public function set test(v:String):void 
     { 
      this._test = v; 
     } 
    } 
} 

내가 테스트 FLA에 구성 요소를 드래그

이 구성 요소의 속성이 모두 관리 가능 [] 메타 태그에 따라 게재되어 다음과 같이 MyComp.as의 코드는 보인다. 그러나 구성 요소 관리자에서 속성을 설정하면 구성 요소 관리자가 말하는 것과 달리 값은 항상 null입니다.

예를 들어 trace를 추적 할 때 항상 null을 출력합니까?

런타임시 구성 요소 관리자의 값이 구성 요소에 반영되도록하려면 어떻게해야합니까?

답변

4

구성 요소와 검사 가능한 속성의 작업 순서는 약간 까다 롭습니다. Keith Peters (Bit-101)는 a nice overview of the problems with inspectable getters and setters을 썼다.

특히 문제는 설정되는 inspectable 속성보다 생성자가 먼저 호출된다는 것입니다. 이 문제를 해결하는 좋은 방법 중 하나는 생성자가 EXIT_FRAME 이벤트에 대한 수신기를 설정하는 것입니다.이 이벤트는 다른 모든 작업이 완료된 직후에 동일한 프레임에서 실행됩니다. 예를 들어 :

addEventListener("exitFrame", onExitFrame); 

이벤트가 발생, 그것은 이벤트 클래스는 단지 정의를없는 것 같다

package { 

    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class SampleComponent extends MovieClip { 

     private var _foo:Number; 

     public function SampleComponent() { 
      trace("SampleComponent: constructor"); 
      addEventListener(Event.EXIT_FRAME, onReady); 
     } 

     [Inspectable] 
     public function get foo():Number { 
      trace("SampleComponent: get foo: " + _foo); 
      return _foo; 
     } 

     public function set foo(value:Number):void { 
      trace("SampleComponent: set foo: " + value); 
      _foo = value; 
     } 

     private function onReady(event:Event):void { 
      trace("SampleComponent: ready!"); 
      removeEventListener(Event.EXIT_FRAME, onReady); 
     } 
    } 
} 
+0

Branden에게 감사드립니다! 나는 2 주 동안 두피에서 머리카락을 뽑아 내고 있었고 일을 제대로 할 수 없었다. 내가 해결책을 찾지 못하면 곧 알려 드리겠습니다. –

+0

위의 링크를 읽은 후 구성 요소 초기화가 완료되기 전에 생성자에서 내 추적으로 인해 문제가 있음을 발견했습니다. ADDED_TO_STAGE 이벤트 또는 이와 비슷한 이벤트로 다시 시도해 보겠습니다. 게시물을 가져 주셔서 감사합니다! –

+0

음. ADDED_TO_STAGE에서 여전히 null이므로 아직 너무 이릅니다. 구성 요소가 생성/초기화 될 때 Flash에서 이벤트가 발생합니까? –

1

당신은 그냥이 같은 텍스트 문자열 "exitFrame"를 사용할 수 있습니다.

관련 문제