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

4

我在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?
如何使组件检查器的值在运行时反映在组件中?
2个回答

4
组件和可检查属性的操作顺序可能有些棘手。Keith Peters(Bit-101)撰写了一篇关于可检查 getters 和 setters 问题的好文章。

问题在于,构造函数在设置可检查属性之前被调用。一个不错的解决方法是使您的构造函数设置 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);
        }
    }
}

谢谢分享链接,Branden!我已经抓狂两个星期了,还是无法让事情正常运转。如果我找到解决方案,我会尽快告知。 - josef.van.niekerk
阅读了上面的链接后,我注意到我的问题是由于我在构造函数中进行跟踪,而组件尚未完成初始化。我将尝试使用ADDED_TO_STAGE事件或类似的东西重新尝试。感谢您的帖子! - josef.van.niekerk
嗯,在 ADDED_TO_STAGE 事件时,仍然为 null,因此还为时过早。Flash 在组件创建/初始化后是否会触发事件? - josef.van.niekerk
好的,因为这是一个显示对象,你可以使用ENTER_FRAME事件,但那会晚一帧触发,所以,相反地,请尝试新的(对于Flash 9而言)Event.EXIT_FRAME事件。我将在我的答案中发布一个代码示例。 - Branden Hall
我讨厌Flash Professional,但我喜欢ActionScript 3. :) - josef.van.niekerk
看起来Event.EXIT_FRAME只适用于Flash 10,因为当编译为Flash 9时,与文档相反,我会收到未定义的props错误。 - abusedmedia

1
你可以直接使用文本字符串“exitFrame”,就像这样:
addEventListener( "exitFrame", onExitFrame );

事件触发了,似乎Event类仅缺少定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接