我在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的值反映在组件中?
答案 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类只是缺少定义。