如何在dojox.grid.DataGrid中启用浏览器上下文菜单?

时间:2010-02-03 20:09:05

标签: datagrid dojo contextmenu right-click

我正在尝试让浏览器上下文菜单在dojox.grid.DataGrid中运行。当我现在右键单击网格时,没有任何反应。我尝试在网格实例上覆盖onCellContextMenu,onRowContextMenu,doContextMenu和oncontextmenu以及空函数,但这不起作用。右键单击调用onCellContextMenu方法,但它仍然不显示上下文菜单。我认为事件正在另一个层面停止,但我不确定在哪里看。

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

3 个答案:

答案 0 :(得分:4)

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

  1. 创建自定义网格将使用的自定义_FocusManager,其中唯一的更新是删除doContextMenu方法的功能,该方法默认执行dojo.stopEvent - //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) {}
    
  3. 以下是我在社区聊天中提供的一个工作示例:http://jsfiddle.net/kfranqueiro/SqYXd/

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您需要在div中创建一个dijit.menu并将其显示设置为none。这是一个示例,其中上下文菜单和网格包含在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 },...);