2014-12-12 3 views
0
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 внутри меню Ошибка приемника

Однако fireEvent заканчивается:

Uncaught TypeError: Cannot read property 'apply' of undefined 

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

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

где он выходит из строя.

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

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

+0

Вы проверили область (это), используя точки останова? – Sreek521

+0

, если я специально добавил область действия на каждом шаге, область действия все равно может оказаться неправильной? Если я не добавил область действия: это - я просто в конечном итоге получаю fireEvent неопределенным. Я могу получить доступ к другим переменным, функциям через это также. Я предполагаю, что fireEvent как-то все еще выходит из сферы действия при поиске пользовательского события в этом классе и не может найти его. События задаются как this.addEvents() в initComponent. И точка останова на fireEvent действительно показывает подходящую область видимости на этом - и это событие указано. –

+0

AH - отладка через шаги, кажется, что один из слушателей не определен. Который все еще озадачивает меня - поскольку это же самое событие прекрасно работает, если оно находится в обработчике diff-кнопок. –

ответ

0

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

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

this.on()

в InitComponent перед тем суперкласса инициализации.