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)
где он выходит из строя.
Есть ли какие-либо проблемы с определением области охвата/вложенности при попытке вызвать событие внутри прослушивателя событий?
Моя цель - инициировать это событие при выборе пункта меню для кнопки.
Вы проверили область (это), используя точки останова? – Sreek521
, если я специально добавил область действия на каждом шаге, область действия все равно может оказаться неправильной? Если я не добавил область действия: это - я просто в конечном итоге получаю fireEvent неопределенным. Я могу получить доступ к другим переменным, функциям через это также. Я предполагаю, что fireEvent как-то все еще выходит из сферы действия при поиске пользовательского события в этом классе и не может найти его. События задаются как this.addEvents() в initComponent. И точка останова на fireEvent действительно показывает подходящую область видимости на этом - и это событие указано. –
AH - отладка через шаги, кажется, что один из слушателей не определен. Который все еще озадачивает меня - поскольку это же самое событие прекрасно работает, если оно находится в обработчике diff-кнопок. –