Dojo 1.5。我有一个增强的网格,其rowMenu定义如下:
<div dojoType="dijit.Menu" id="rowMenu" style="display: none;">
<div dojoType="dijit.MenuItem" id="menuUsers">Add/Edit Users</div>
</div>
我听这个菜单项的onclick如下:
dojo.connect(dijit.byId("menuUsers"), "onClick", addEditUsers);
如果我尝试在addEditUsers中使用e.rowIndex,则它是未定义的。我能够弄清楚如何获得用户右键单击的行的唯一方法是通过单独的行侦听器:
dojo.connect(dijit.byId("grid"), "onRowContextMenu", rowContextMenu);
从rowContextMenu(),e.rowIndex可用,所以我可以使用
获取行数据var item = e.grid.getItem(e.rowIndex);
console.log(e.grid.store.getValue(item, 'name')); // this will show the value of a 'name' column for the row the user right clicked.
所以我可以使用它来切换全局/对象(例如currentContextItem),但似乎必须有一个更简单的方法。是否没有直接的方法从上下文菜单项侦听器获取rowIndex / data?请注意,我不能使用grid.selection.getSelected(),因为这是用户最后左键单击的行。
答案 0 :(得分:2)
AFAIK,没有其他解决方案。事实上,几个月前我问了同样的问题,这是我得到的唯一解决方案。
答案 1 :(得分:2)
我有一个类似的问题。我想创建一个上下文菜单,允许用户从数据网格中删除他们右键单击的项目,并从数据存储区中删除该项目。认为它应该非常简单,在您的帮助和其他一些网站上,我想出了以下代码。
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>
当然,如果您以编程方式创建DataGrid,只需将 onRowContextMenu:onRowContextMenuFunc 添加到您的声明中。