2011-03-10 133 views
1

我有一个包含TreePanel的菜单。用户需要能够使用上下文菜单与TreePanel的节点进行交互。我从附加到TreePanel的contextmenu事件的函数中显示上下文菜单。ExtJS中的菜单项内的上下文菜单

这工作除外:

  1. 没有allowOtherMenus: true,示出了上下文菜单使主菜单,因此TreePanel中,消失;
  2. 在任一菜单上都有allowOtherMenus: true,当用户单击TreePanel的空白区域时,上下文菜单不会消失。

我正在寻找一种方法来使上下文菜单工作,就好像TreePanel不是菜单中的项目一样。

样机: enter image description here

+0

不知道我关注你,你可以在http://jsfiddle.net上发布一个工作示例,然后我可以看一看吗? – JamesHalsall 2011-03-10 12:32:18

+0

jsfiddle不支持Ext Core以外的ExtJS,所以我不能在那里创建Menu或TreePanel。我添加了一张照片。 – 2011-03-10 13:28:30

+0

好的,所以当用户点击treepanel中的任何地方(不是在一个节点上),你想菜单消失? – JamesHalsall 2011-03-10 13:31:43

回答

3

我发现这似乎在FF3/IE8/Chrome浏览器,虽然它可以有一个没有显示出了没有副作用。

var hide_context_menu = function() { context_menu.hide() }; 

var context_menu = new Ext.menu.Menu({ 
    allowOtherMenus: true, 
    items: [...], 
    listeners: { 
     show: function() { 
      Ext.getDoc().on('mouseup', hide_context_menu); 
     }, 
     hide: function() { 
      Ext.getDoc().un('mouseup', hide_context_menu); 
     } 
    } 
}); 

allowOtherMenus: true防止由MenuMgr主菜单的遮盖时的上下文菜单弹出。将处理程序隐藏到mouseup事件允许处理点击事件。

+0

这应该工作耶,我有这样的绑定,但绑定到'click'事件,这将工作得更好,虽然。只要监视它,看看是否有任何奇怪的问题 – JamesHalsall 2011-03-10 16:35:02

+0

好的,谢谢你的帮助。 – 2011-03-10 17:10:48