即使右键单击DataGrid的BLANK区域,也会显示onRowContextMenu上的Dojo DataGrid上下文菜单

时间:2011-11-18 19:01:08

标签: dojo contextmenu right-click dojox.grid dojox.grid.datagrid

我有一个DataGrid,里面有项目。右键单击其中一行时,将显示“Dojo上下文菜单”,其中包含删除该行的选项。如果您尝试右键单击DataGrid的空白区域,则不会显示上下文菜单....但是,如果您首先右键单击某行,然后单击“取消”菜单选项(不执行任何操作)或者左键单击页面上的其他位置(隐藏上下文菜单),然后右键单击DataGrid的空白区域,显示上下文菜单,如果单击上下文菜单中的“删除项目”选项,则会删除你右键点击的最后一项。

为什么在右键单击DataGrid的空白区域时允许显示上下文菜单,但只有 AFTER 您已经右键单击了一个项目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>

2 个答案:

答案 0 :(得分:3)

好吧,我不确定为什么只有在第一次右击项目后右键单击空白区域时才允许显示上下文菜单,但我确实想出了解决根本问题的方法: 右键单击数据网格中的行项,然后单击关闭以隐藏上下文菜单,然后右键单击数据网格的空白区域并选择菜单项会导致第一次右键单击的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>

答案 1 :(得分:0)

grid5_rowMenu 是一个菜单。

egrid.domNode 是数据网格的DOM节点。

* grid5_rowMenu.bindDomNode(e.grid.domNode); *

它是:给网格提供上下文菜单(DOM节点内的任何地方)。

因为数据网格中的内容总是发生变化,所以将菜单分配给网格内的元素并不容易。

如果您的网格没有更改其内容,您可以这样做: * grid5_rowMenu.bindDomNode(e.target.parentElement); *