2014-02-18 5 views
0

У меня есть мое меню 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 
     }, 
    }] 
} 

ответ

0

Ext.menu.Menuclick(menu, item, e, eOpts) событие имеет четыре параметра.

Первый параметр menu сам объект.

Второй параметр item - объект объекта меню, который был нажат. Этот параметр можно использовать для определения того, какой элемент в меню был нажат.

+0

Спасибо за ответ. Но почему он вызывается дважды? Также 4 параметра (меню, пункт, e, эопты) присутствуют только во втором вызове. Но при первом вызове он имеет 3 параметра (item, e, eopts). – kapd

+0

Это потому, что у вас есть в вашей конфигурации элементов 'bubbleEvents: ['click'],'. Итак, первое пойманное событие происходит из 'menuitem', а второе пойманное событие происходит из' menu'. Поэтому удалите конфигурацию 'bubbleEvents' и просто слушайте событие' menu' 'click'. – Akatum

+0

Спасибо, сработало. Тем не менее, я подумал, что если я буду пузыриться, это не вызовет щелчок по menuitem? – kapd

Смежные вопросы