У меня есть мое меню ExtJs, определяемое следующим образом. У меня есть два настраиваемых метода, добавленных в мой пункт меню «hookMethod» и «handlerMethod». 'hookMethod' добавляется на основе некоторого состояния. Я пузырю событие клика для отдельных пунктов меню в корневом меню. Затем проверяет, установлен ли крючок, затем вызовите 'hookMethod', иначе вызывайте метод handlerMethod. Проблема, с которой я сталкиваюсь, заключается в том, что прослушиватель кликов вызывается дважды, один раз для menuitem и один раз для меню. Кроме того, что такое аргумент. Я думал, что он будет вызван только один раз для меню, и у меня будет какой-то способ получить фактический пункт меню, щелкнув в нем.Событие меню пузырьков ExtJs
{
xtype: "menu",
listeners: {
click: function(item, e, eopts)
{
if(item.hookMethod) {
item.hookMethod(item.handlerMethod);
}
else {
item.handlerMethod(this);
}
}
},
items: [{
xtype: "menuitem",
text: "Process Record",
bubbleEvents: ['click'],
hookMethod: function(actualMethod)
{
//do some pre-processing here and then call the actual handler
actualMethod(args)
},
handlerMethod: function(args)
{
//Do actual processing
},
}]
}
Спасибо за ответ. Но почему он вызывается дважды? Также 4 параметра (меню, пункт, e, эопты) присутствуют только во втором вызове. Но при первом вызове он имеет 3 параметра (item, e, eopts). – kapd
Это потому, что у вас есть в вашей конфигурации элементов 'bubbleEvents: ['click'],'. Итак, первое пойманное событие происходит из 'menuitem', а второе пойманное событие происходит из' menu'. Поэтому удалите конфигурацию 'bubbleEvents' и просто слушайте событие' menu' 'click'. – Akatum
Спасибо, сработало. Тем не менее, я подумал, что если я буду пузыриться, это не вызовет щелчок по menuitem? – kapd