【发布时间】:2011-11-03 15:38:44
【问题描述】:
我的 Web 应用程序基于 dojo 1.6.0。 我遇到的问题基本上基于事件处理程序和/或它们的利用率 在道场“dojox.grid.EnhancedGrid”库中。
我的应用程序包含一个带有大量行的 dojox 增强网格。 (100+)
此增强网格使用“cellMenu”插件来显示上下文菜单 右键单击每个网格单元。
我的目标是使用上下文菜单“智能”选择行。
例如:
用户右键单击位于“lastname”列中且值为“miller”的单元格。然后他单击上下文菜单中的“智能选择”。 然后,应用程序将遍历行数据并选择所有将“miller”作为“lastname”的行。 之后,用户将通过按下按钮对选定的行发起操作。
这是一个小的源代码示例,说明了使用上下文菜单可视化增强网格的声明性方法:
<table dojoType="dojox.grid.EnhancedGrid" plugins="{cellMenu:'myMenu'}">
<div id="myMenu" dojoType="dijit.Menu">
<div id="mi1" dojoType="dijit.MenuItem">Do something with this cell</div>
<div id="mi2" dojoType="dijit.MenuItem">Do something else with this cell</div>
</div>
<thead>
definition of columns
</thead>
</table>
动作代码与 js-Files 中的可视化分开处理:
<script type="text/javascript">
dojo.addOnLoad(function(){
dojo.connect(dijit.byId('mi1'),'onClick',function(event){
//Use Data from the cell clicked to do something
});
dojo.connect(dijit.byId('mi2'),'onClick',function(event){
//Use Data from the cell clicked to do something else
});
});
</script>
我对 dojo 比较陌生,没有处理增强网格的经验。
所以我的问题如下:
当我在上下文菜单中单击“dijit.Menu”时,“onClick”事件 其中包含的“dijit.MenuItem”被触发。
在这个事件处理程序中,我需要在上下文菜单中读取“网格单元”的内容 已打开,但我没有(或目前不知道)获取对“网格单元”的引用的方法。
使用默认策略,我可能能够获得对 MenuItem 的引用,并可能从那里获得对菜单的引用,但我无法找到包含对“网格单元”或行/列 ID 的引用的属性使我能够访问单击的单元格。
由于上下文菜单可以对通过右键单击打开它们的“项目”做一些事情,我认为必须有一种方法(正如设计师所说的那样)来访问这个“项目”。
我还没有找到说明这一点的文档或示例,非常感谢您的帮助。
【问题讨论】:
-
我认为上下文菜单的菜单项单击事件没有对单击元素的内置引用很奇怪。如果上下文菜单不能与单元格相关,那么上下文菜单(尤其是增强网格的单元格上下文菜单)的意义何在?
标签: javascript contextmenu dojo dojox.grid