我在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 []元标记显示。但是,当我在组件检查器中设置属性时,尽管组件检查器说了什么,但该值始终为null。

跟踪示例测试时,它始终输出null?

如何在运行时获取组件检查器的值以反映在组件中?

最佳答案

组件的操作顺序和可检查的属性可能有些棘手。基思·彼得斯(Keith Peters,位101)写下a nice overview of the problems with inspectable getters and setters

尤其是问题在于,对于要设置的可检查属性,构造函数被调用为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);
        }
    }
}

09-20 04:15