【问题标题】:dojo EnhancedGrid context menu - how to get rowIndex from a menu item's onclick event?dojo EnhancedGrid 上下文菜单 - 如何从菜单项的 onclick 事件中获取 rowIndex?
【发布时间】:2011-10-28 18:27:38
【问题描述】:

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

【问题讨论】:

    标签: javascript dojo dojox.grid.datagrid


    【解决方案1】:

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

    【讨论】:

      【解决方案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 添加到您的声明中。

      【讨论】:

      • 编辑:上面的代码有一些问题,它允许用户右键单击一行,然后单击取消或隐藏上下文菜单,然后右键单击数据的空白区域网格并单击删除菜单选项,它将删除之前右键单击的项目。如果你有同样的问题,请查看我修改后的代码HERE
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      相关资源
      最近更新 更多