如何在 dojox.grid.DataGrid 中启用浏览器上下文菜单?
Posted
技术标签:
【中文标题】如何在 dojox.grid.DataGrid 中启用浏览器上下文菜单?【英文标题】:How to enable the browser context menu in dojox.grid.DataGrid? 【发布时间】:2011-01-12 19:07:09 【问题描述】:我正在尝试让浏览器上下文菜单在 dojox.grid.DataGrid 中工作。当我现在右键单击网格时,没有任何反应。我尝试用网格实例上的空函数覆盖 onCellContextMenu、onRowContextMenu、doContextMenu 和 oncontextmenu,但这不起作用。 onCellContextMenu 方法在右键单击时被调用,但它仍然不显示上下文菜单。我认为该事件正在另一个级别停止,但我不知道该往哪里看。
网格有一个链接列表,我希望用户能够右键单击链接,以便他们可以在新选项卡中打开它们。我知道我可以制作一个自定义上下文菜单来提供该功能,但我想知道将来如何禁用此行为。
【问题讨论】:
【参考方案1】:我知道这可能有点晚了,但我遇到了同样的问题,并通过研究源代码并在 dojo 社区聊天中询问找到了解决方案。该解决方案涉及创建具有以下修改的自定义 Grid 小部件:
创建一个您的自定义网格将使用的自定义 _FocusManager,其中唯一的更新是删除默认执行 dojo.stopEvent 的 doContextMenu 方法的功能 -
//extension to remove contextmenu dojo.stopEvent
dojo.declare('myGrid.dojox.grid._FocusManager', dojox.grid._FocusManager,
doContextMenu: function()
);
删除网格中默认执行dojo.stopEvent的原始回调:
//移除调用stopEvent的原始回调
onRowContextMenu: function(e) ,
onHeaderContextMenu: function(e)
这是我在社区聊天中得到的一个工作示例:http://jsfiddle.net/kfranqueiro/SqYXd/
【讨论】:
关于该解决方案:“这是我在社区聊天中获得的一个工作示例:jsfiddle.net/kfranqueiro/SqYXd”:它确实适用于 Dojo Datagrids。不幸的是,它不适用于 EnhancedGrids(绑定保留在网格上,因此即使您没有在网格上绑定任何 Dijit 菜单,浏览器菜单仍然不会出现)。任何“增强”解决方案?... A.R.【参考方案2】:我知道这并不完全是您想要显示上下文菜单的解决方案,但您是否尝试过告诉您的用户在这些链接上按 Ctrl-leftClick 而不是右键单击以显示上下文菜单?
【讨论】:
【参考方案3】:您需要在 div 中创建 dijit.menu 并将其显示设置为无。这是一个示例,其中上下文菜单和网格包含在 dijit ContentPane 中:
<div dojoType="dijit.layout.ContentPane" title="MyGrid">
<div id="myGridContainer" style="width:100%;height:100%"></div>
<div id="myGridContextMenu" dojoType="dijit.Menu" style="display: none;">
<div dojoType="dijit.MenuItem" id="myGridContextMenu.delete" onClick="deleteItem">Delete</div>
</div>
</div>
您还需要在创建菜单时将其连接到网格:
var myGrid = new dojox.grid.DataGrid( ..., onRowContextMenu: myGridcontextMenu ,...);
【讨论】:
我无法让它工作,它仍然没有显示上下文菜单。 我想我可能误解了你的问题。您希望 Firefox/chrome/IE 菜单显示上下文,就像在图像上一样?而不是你勾上的。所以把它当作页面上的另一个链接吗?以上是关于如何在 dojox.grid.DataGrid 中启用浏览器上下文菜单?的主要内容,如果未能解决你的问题,请参考以下文章
dojox.grid.EnhancedGrid 和 dojox.grid.DataGrid 的继承关系