如何在 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 的继承关系

动态设置 dojox.grid.datagrid 标题列宽

Dojox.grid.DataGrid 过滤

如何覆盖 dojox _Scroller 类中的方法?

dojox.data.Grid 中的小部件 (dijit.form.Button)

如何通过 JS 访问在 HTML 中声明的 Dojo DataGrid?