我有一个包含条目的DataGrid。当您右键单击其中一行时,将显示一个Dojo Context Menu,其中包含删除该行的选项。如果您尝试右键单击DataGrid的空白区域,则不会显示上下文菜单....但是,如果您首先右键单击一行,然后单击取消菜单选项(它不做任何事情),或者如果您左键单击页面上的其他地方(隐藏上下文菜单)并右键单击DataGrid的空白区域,则显示上下文菜单,如果您单击上下文菜单中的删除项选项,它将删除您右键单击的最后一个项目。
为什么它允许上下文菜单显示,当你右键单击在空白区域的DataGrid,但只有后你已经右键单击一个项目在DataGrid?
任何提示将不胜感激。下面是我到目前为止的代码:
var selectedItem; // This has to be declared "globally" outside of any functions
function onRowContextMenuFunc(e) {
grid5_rowMenu.bindDomNode(e.grid.domNode);
selectedItem = e.grid.getItem(e.rowIndex);
}
function gridRowContextMenu_onClick(e) {
store3.deleteItem(selectedItem);
}
.
<div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;">
<div dojoType="dijit.MenuItem" onClick="gridRowContextMenu_onClick">Delete</div>
<div dojoType="dijit.MenuItem">Cancel</div>
</div>
.
<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenuFunc"></div>
好吧,我不确定为什么这是使上下文菜单显示在右击空白区域只有在首先右键单击一个项目,但是我想出一个解决修复我的根本问题:右键单击一个行项目在数据网格中,然后单击上下文菜单去隐藏,然后右击空白区域的数据网格和选择一个菜单项原因rowIndex第一通过右键单击
这是我的代码;我希望这对将来遇到同样问题的人有所帮助:
var selectedItem;
function onRowContextMenu(e) {
grid5_rowMenu.bindDomNode(e.grid.domNode);
selectedItem = e.grid.getItem(e.rowIndex);
}
function gridRowContextMenuExecute(task) {
if((task == "remove") && (selectedItem != null)) {
store3.deleteItem(selectedItem);
}
else {
selectedItem = null;
}
}
.
<div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;" onBlur="gridRowContextMenuExecute('cancel')">
<div dojoType="dijit.MenuItem" onMouseDown="gridRowContextMenuExecute('remove')">Remove from Transaction</div>
<div dojoType="dijit.MenuItem">Cancel</div>
</div>
.
<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenu"></div>
grid5_rowMenu 菜单。
e.grid。domNode为数据网格的DOM节点
* grid5_rowMenu.bindDomNode (e.grid.domNode); *
它是:给网格上下文菜单(在DOM节点内的任何地方)。
由于数据网格中的内容总是在变化,所以将菜单分配给网格中的元素并不容易。
如果你的网格不改变它的内容,你可以这样做:* grid5_rowMenu.bindDomNode (e.target.parentElement); *