Actionscript3 / LCCS: как получить доступ к свойству родительского класса, защищенного var? - PullRequest
0 голосов
/ 19 августа 2011

Я бы хотел назначить прослушиватель событий защищенной переменной таймера в родительском классе.

Я работаю с Adobe LCCS и создал BatonProperty который реализует Батон

Теперь в Baton объявлена ​​защищенная переменная таймера, и по какой-то причине я не могу получить доступ к этому _autoPutDownTimer из экземпляра BatonProperty.

  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;

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Если BatonProperty расширяет Baton, то просто измените строку:

mybatonprop.baton._autoPutDownTimer.addEventListener(TimerEvent.TIMER,countDown);

до

mybatonprop._autoPutDownTimer.addEventListener(TimerEvent.TIMER,countDown);

в противном случае сделайте _autoPutDownTimer общедоступным или следуйте ответу @ Джейкоба.

Или для третьего предложения, поскольку Baton является классом Adobe, и вы не можете его редактировать, создайте свой собственный класс MyBaton, который расширяет Baton, затем выполните одно из двух предложений. (MyBaton будет работать везде Baton работает)

2 голосов
/ 19 августа 2011

protected означает личное, кроме потомков класса. то есть классы, которые наследуются от родителя. Похоже, что ваш BatonProperty использует Baton с помощью композиции, а не наследования. И, насколько я могу судить, кажется, что вы пытаетесь получить доступ к _autoPutDownTimer из Baton / BatonProperty через третий класс.

Моя рекомендация, однако, заключается не в том, чтобы добавлять прослушиватель событий непосредственно в таймер, а в том, чтобы отправлять событие из Baton в функции onTimerComplete

protected function onTimerComplete(event:TimerEvent):void {
    ....
    dispatchEvent(new Event('putDownComplete'));
}

и

mybatonprop.baton.addEventListener('putDownComplete', onPutdownComplete);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...