0

道场 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() 因为那是用户最后左键单击的任何行。

4

2 回答 2

2

AFAIK,没有其他解决方案。事实上,几个月前我问过同样的问题,这是我得到的唯一解决方案。

于 2011-10-29T18:59:09.107 回答
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添加到您的声明中。

于 2011-11-17T22:46:25.757 回答