Flash CS4 - 组件检查器,属性始终为null?

时间:2009-07-21 13:15:43

标签: flash actionscript-3

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

当跟踪例如测试时,它总是输出null?

如何在运行时将Component Inspector的值反映在组件中?

2 个答案:

答案 0 :(得分:4)

使用组件和可检查属性的操作顺序可能有点棘手。 Keith Peters(Bit-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);
        }
    }
}

答案 1 :(得分:1)

您可以使用文本字符串“exitFrame”,如下所示:

addEventListener( "exitFrame", onExitFrame );

事件触发,似乎Event类只是缺少定义。