我想给父类中的一个受保护的定时器变量分配一个事件侦听器。
我正在使用Adobe LCCS,并创建了一个实现Baton的BatonProperty
现在,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);
}我很想像这样给它附加一个事件监听器,但似乎我做不到,任何提示都是非常感谢的:
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;发布于 2011-08-19 16:30:19
如果BatonProperty扩展了Baton,那么只需更改行:
mybatonprop.baton._autoPutDownTimer.addEventListener(TimerEvent.TIMER,countDown);至
mybatonprop._autoPutDownTimer.addEventListener(TimerEvent.TIMER,countDown);否则,将_autoPutDownTimer公之于众,或者遵循@雅各布的回答。
或者对于第三个建议,由于Baton是一个Adobe类,您不能对其进行编辑,因此可以创建自己的扩展Baton的类MyBaton,然后执行这两个建议中的任何一个。( Baton在任何地方都可以使用MyBaton)
发布于 2011-08-19 12:15:28
protected表示私有,除非是该类的后代。即从父类继承的类。看起来你的BatonProperty通过组合使用了指挥棒,而不是继承。而且,据我所知,您似乎正在尝试通过第三个类从Baton/BatonProperty访问_autoPutDownTimer。
不过,我的建议不是将事件侦听器直接添加到计时器中,而是在onTimerComplete函数中分派来自Baton的事件
protected function onTimerComplete(event:TimerEvent):void {
....
dispatchEvent(new Event('putDownComplete'));
}和
mybatonprop.baton.addEventListener('putDownComplete', onPutdownComplete);https://stackoverflow.com/questions/7116814
复制相似问题