2014-02-18 93 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