Flash CS4 - Инспектор компонентов, свойства всегда нулевые? - PullRequest
4 голосов
/ 21 июля 2009

Я создал небольшой компонент во Flash CS4 и связал свой символ MyComp с соответствующим классом MyComp. Код в MyComp.as выглядит следующим образом:

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, все свойства компонента отображаются в соответствии с метатегом Inspectable []. Но когда я устанавливаю свойства в Инспекторе компонентов, значение всегда равно нулю, несмотря на то, что говорит Инспектор компонентов.

При трассировке, например, теста, всегда выводится ноль?

Как получить значения Инспектора компонентов для отражения в компоненте во время выполнения?

Ответы [ 2 ]

4 голосов
/ 21 июля 2009

Порядок операций с компонентами и проверяемыми свойствами может быть немного сложнее. Кит Питерс (Бит-101) написал хороший обзор проблем с проверяемыми геттерами и сеттерами .

Проблема, в частности, заключается в том, что конструктор вызывается PRIOR для устанавливаемых проверяемых свойств. Один хороший способ обойти это - заставить ваш конструктор настроить прослушиватель для события EXIT_FRAME, которое будет выполняться во время того же кадра, сразу после того, как все остальное будет сделано. Например:

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);
        }
    }
}
1 голос
/ 12 июля 2011

Вы можете просто использовать текстовую строку «exitFrame», например:

addEventListener( "exitFrame", onExitFrame );

Событие запускается, кажется, что в классе Event просто отсутствует определение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...