2014-02-18 51 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,eopts)仅在第二次调用时出现。但在第一次调用时,它有3个参数(item,e,eopts)。 – kapd

+0

这是因为您的项目配置中有'bubbleEvents:['click'],'。所以第一个被捕获的事件来自'menuitem',第二个被捕获的事件来自'menu'本身。所以删除你的'bubbleEvents'配置,只听'menu''点击'事件。 – Akatum

+0

感谢它的工作。但是,我想如果我将它泡起来,它不会导致menuitem上的点击? – kapd