fireEvent внутри ошибок прослушивателя меню

return new Ext.Button({
  text: cfg.text,
  menu: {
    xtype: 'menu',
    items: cfg.menu,
    listeners: {
      itemclick: {
        fn: function() {
          console.log(this);
          this.fireEvent('tabchange', 'apps');
        },
        scope: this
      },
      scope: this
    },
    scope: this
  },
  minWidth: 50,
  scope: this
});

cfg является параметром функции. Это все есть. Console.log работает - поэтому код до этого момента также работает. Это, кажется, находится в правильном объеме.

Тем не менее, fireEvent заканчивается:

Uncaught TypeError: невозможно прочитать свойство «применить» неопределенного

После вызовов в журнале ошибок fireEvent выполняется, он достигает

EXTUTIL.Event.fire
 if(l && l.fireFn.apply(l.scope || me.obj || window, args) === FALSE)

Где это терпит неудачу.

Есть ли какая-то проблема с областью видимости/вложенностью при попытке вызвать событие внутри прослушивателя событий?

Моя цель - вызвать это событие при выборе пункта меню для кнопки.


person Mauro Tamm    schedule 12.12.2014    source источник
comment
Вы проверяли область (это) с помощью точек останова ??   -  person Sreek521    schedule 12.12.2014
comment
если я специально добавил область действия на каждом шаге, область действия все равно может оказаться неправильной? Если я не добавил область действия: это, я просто получаю неопределенное значение fireEvent. Я также могу получить доступ к другим переменным, функциям через это. Я предполагаю, что fireEvent каким-то образом все еще выходит за рамки при поиске пользовательского события в этом классе и не может его найти. События устанавливаются как this.addEvents() в initComponent. И точка останова на fireEvent действительно показывает правильно выглядящую область для этого - и это событие указано в списке.   -  person Mauro Tamm    schedule 12.12.2014
comment
AH - пошаговая отладка, похоже, что один из слушателей не определен. Что до сих пор меня озадачивает, так как то же самое событие отлично работает, если оно находится в обработчике кнопок diff.   -  person Mauro Tamm    schedule 12.12.2014


Ответы (1)


По-видимому, это произошло из-за неопределенного обработчика.

Обработчик был установлен с помощью

это.на()

в initComponent перед суперклассом init.

person Mauro Tamm    schedule 12.12.2014