我想将一个事件监听器分配给父类中的受保护的定时器变量。
我正在使用Adobe LCCS,并创建了BatonProperty 实现Baton
现在,Baton有一个像这样声明的受保护的计时器变量,由于某种原因,我无法从BatonProperty实例访问这个_autoPutDownTimer。
public function Baton()
{
super();
_autoPutDownTimer = new Timer(_timeout*1000, 1);
_autoPutDownTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
invalidator.addEventListener(Invalidator.INVALIDATION_COMPLETE,commitP roperties);
}
我很乐意像这样附上一个eventlistener,但似乎我不能,任何提示真的很感激:
public var mybatonprop:BatonProperty;
mybatonprop= new BatonProperty();
mybatonprop.sharedID = "myBaton";
mybatonprop.subscribe();
mybatonprop.baton._autoPutDownTimer.addEventListener(TimerEvent.TIMER,countDown);
这给出了错误:“actionscript尝试通过带有静态类型的引用来访问不可访问的属性”但似乎属性不是私有的,只是受保护的,因为它被声明为这样
/**
* @private
*/
protected var _autoPutDownTimer:Timer;
答案 0 :(得分:2)
protected
表示私有,除了该类的后代。即从父级继承的类。看起来你的BatonProperty通过合成使用Baton,而不是继承。而且,据我所知,您似乎正试图通过第三类从Baton / BatonProperty访问_autoPutDownTimer。
我的建议虽然不是将事件监听器直接添加到计时器,而是从Baton
函数中的onTimerComplete
发送事件
protected function onTimerComplete(event:TimerEvent):void {
....
dispatchEvent(new Event('putDownComplete'));
}
和
mybatonprop.baton.addEventListener('putDownComplete', onPutdownComplete);
答案 1 :(得分:2)
如果BatonProperty
延长Baton
,则只需更改以下行:
mybatonprop.baton._autoPutDownTimer.addEventListener(TimerEvent.TIMER,countDown);
到
mybatonprop._autoPutDownTimer.addEventListener(TimerEvent.TIMER,countDown);
否则,将_autoPutDownTimer
公开,或按照@ Jacob的回答。
或者对于第三个建议,因为Baton
是一个Adobe类,你无法编辑它,创建自己的类MyBaton
,扩展Baton
,然后执行其中任何一个建议。 (MyBaton
将在Baton
到处都有效)