我在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);
}
}
}