我正在尝试让浏览器上下文菜单在dojox.grid.DataGrid中运行。当我现在右键单击网格时,没有任何反应。我尝试在网格实例上覆盖onCellContextMenu,onRowContextMenu,doContextMenu和oncontextmenu以及空函数,但这不起作用。右键单击调用onCellContextMenu方法,但它仍然不显示上下文菜单。我认为事件正在另一个层面停止,但我不确定在哪里看。
网格有一个链接列表,我希望用户能够右键单击链接,以便他们可以在新选项卡中打开它们。我知道我可以创建一个自定义上下文菜单来提供该功能,但我想知道将来如何禁用此行为。
答案 0 :(得分:4)
我知道这可能有点晚了,但我遇到了同样的问题,通过研究源代码并询问dojo社区聊天找到了解决方案。该解决方案涉及创建具有以下修改的自定义网格窗口小部件:
创建自定义网格将使用的自定义_FocusManager,其中唯一的更新是删除doContextMenu方法的功能,该方法默认执行dojo.stopEvent -
//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/
答案 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 },...);