2

我试图让浏览器上下文菜单在 dojox.grid.DataGrid 中工作。当我现在右键单击网格时,什么也没有发生。我尝试用网格实例上的空函数覆盖 onCellContextMenu、onRowContextMenu、doContextMenu 和 oncontextmenu,但这不起作用。onCellContextMenu 方法在右键单击时被调用,但它仍然不显示上下文菜单。我认为该事件正在另一个层面停止,但我不知道该往哪里看。

网格有一个链接列表,我希望用户能够右键单击链接,以便他们可以在新选项卡中打开它们。我知道我可以制作自定义上下文菜单来提供该功能,但我想知道将来如何禁用此行为。

4

3 回答 3

4

我知道这可能有点晚了,但我遇到了同样的问题,并通过研究源代码并在 dojo 社区聊天中询问找到了解决方案。该解决方案涉及创建具有以下修改的自定义 Grid 小部件:

  1. 创建您的自定义网格将使用的自定义 _FocusManager,其中唯一的更新是删除默认执行 dojo.stopEvent 的 doContextMenu 方法的功能 - //extension to remove contextmenu dojo.stopEvent dojo.declare('myGrid.dojox.grid._FocusManager', dojox.grid._FocusManager, { doContextMenu: function() {} });

  2. 删除网格中默认执行 dojo.stopEvent 的原始回调:

    //删除调用stopEvent的原始回调

    onRowContextMenu: function(e) {},
    onHeaderContextMenu: function(e) {}
    

这是我在社区聊天中获得的一个工作示例:http: //jsfiddle.net/kfranqueiro/SqYXd/

于 2010-11-18T16:29:58.393 回答
0

您需要在 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 },...);
于 2010-02-23T14:58:08.630 回答
0

我知道这不完全是您想要显示上下文菜单的解决方案,但是您是否尝试过告诉您的用户在这些链接上按 Ctrl-leftClick 而不是右键单击以显示上下文菜单?

于 2010-02-05T13:49:27.263 回答