2010-07-19 63 views
20

我可以爲樹創建上下文菜單並附加到'contextmenu'事件。 代碼:如何創建extjs網格的上下文菜單

contextMenu = new Ext.menu.Menu({ 
    items: [{ 
    text: 'Edit', 
    iconCls: 'edit', 
    handler: edit 
    },...] 
}) 

Ext.getCmp('tree-panel').on('contextmenu', function(node) { 
    contextMenu.show(node.ui.getAnchor()); 
}) 

但我怎麼能對電網的元素創建上下文菜單?

回答

26

首先定義上下文菜單

mnuContext = new Ext.menu.Menu({ 
    items: [{ 
     id: 'do-something', 
     text: 'Do something' 
    }], 
    listeners: { 
     itemclick: function(item) { 
      switch (item.id) { 
       case 'do-something': 
        break; 
      } 
     } 
    } 
}); 

然後所需事件創建一個監聽器。記住停止事件的默認行爲非常重要,以便您可以用自己的替換。如果您不調用event.stopEvent()方法來停止向前冒泡事件,那麼無論您做什麼,瀏覽器的默認上下文菜單都會出現。

rowcontextmenu: function(grid, index, event){ 
    event.stopEvent(); 
    mnuContext.showAt(event.xy); 
} 
+1

對於ExtJS 6,'事件。 xy'應該改成'event.getXY()',否則它會出現在左上角。 – harryBundles 2016-01-29 12:34:04

7

嗯,這取決於你想做的事,你可以處理以同樣的方式爲你的榜樣以下GridPanel事件是什麼:contextmenucellcontextmenucontainercontextmenugroupcontextmenuheadercontextmenurowbodycontextmenurowcontextmenu

+0

非常感謝你 – edtsech 2010-07-19 17:38:59

+1

沒有定義上下文菜單的信息。其他答案要好得多,我相信別人的答案。 – 2011-09-25 16:45:26

+1

@George:OP已經在原始問題中定義了他的上下文菜單,所以不需要幫助。在我回答問題14個月後,我投票給我的時候有點蹩腳,因爲你更喜歡更近期的答案。我的答案無論如何都無效或不當。事實上,我的答案提供了由網格提供的特定事件列表,您的首選答案不是。對於他自己而言,但通常是倒票都被用來表示不正確的答案,而不僅僅是您的個人偏好。謝謝。 – 2011-09-26 04:42:29

4

對於extjs4,在您的網格補充一點:

listeners: { 
    itemclick: function(view, record, item, index, e, options){ 
    menuContext.showAt(e.xy); 
    } 
} 

用相同的菜單上下文艾倫之上。

3

必須在您的網格中添加此屬性,例如:

viewConfig: { 
      stripeRows: true, 
      listeners: { 
       itemcontextmenu: function(view, rec, node, index, e) { 
        e.stopEvent(); 
        contextMenu.showAt(e.getXY()); 
        return false; 
       } 
      } 
     }, 
1
  1. 創建一個控制器文件
  2. 創建視圖文件

    init : function() { 
         this.control(
    
            'countrylist' : { 
    
             itemcontextmenu : this.contextMenuBox 
    
            } 
           }); 
         }, 
    
         contextMenuBox:function(view, record, item, index, e, eOpts){ 
    
    
    if(record.data.status=='Y'){ 
    
    var menu = Ext.create('Ext.menu.Menu',{ 
          items: [{ 
             text: 'Do something' 
            }] 
            }); 
            e.stopEvent(); 
            menu.showAt(e.getXY()); 
    
    
         } 
         else{ 
          var menu = Ext.create('Ext.menu.Menu',{ 
          items: [{ 
             text: 'Don\'t' 
            }] 
            }); 
            e.stopEvent(); 
            menu.showAt(e.getXY()); 
    
    
         } 
    
         },