【问题标题】:How to pass event and other arguments in grid's context menu item handler?如何在网格的上下文菜单项处理程序中传递事件和其他参数?
【发布时间】:2011-01-17 18:35:53
【问题描述】:

我正在使用 Dojo 1.5,并且我正在尝试创建一个上下文菜单,该菜单可以调用函数 myFunction 传递事件和其他参数。到目前为止,我有以下代码:

    <div dojoType="dijit.Menu" id="bankerMenu" style="display: none;">
        <div dojoType="dijit.MenuItem" onclick="copyDocuments('bankerFolder');" iconClass="dijitEditorIcon dijitEditorIconCopy">Copy to Client</div>
            <div dojoType="dijit.PopupMenuItem" onclick="doNothing()" iconClass="dijitEditorIcon dijitEditorIconCopy">
                <span><s:text name="CopyTo.label"/></span>
                <div dojoType="dijit.Menu" id="bigsubmenu">
var="distributionList">
                        <div dojoType="dijit.MenuItem" onclick="myFunction(event,'bankerFolder',1)"><s:property value='distributionListName'/></div>
                </div>
            </div>
    </div>

但它无法识别我想要传递给函数的“事件”。我知道我可以用这个来代替通话:

            <div dojoType="dijit.MenuItem" label="Some menu item 2">
                <script type="dojo/method" event="onClick" args="evt">
                    myFunction(evt,'bankerFolder',1);
                </script>
            </div> 

但我想简化它并使用第一种语法。我该怎么做?

【问题讨论】:

    标签: events dojo contextmenu handler


    【解决方案1】:

    从字面上传递event 可能最终会让您受到跨浏览器不一致的摆布。但是,由于通过 Dojo 连接的事件会为您担心这一点,并且由于 onClick 是一个已接收事件对象作为参数的小部件事件,因此您应该能够摆脱以下情况:

    <div dojoType="dijit.MenuItem" onClick="myFunction(arguments[0],'bankerFolder',1)"><s:property value='distributionListName'/></div>
    

    还要注意onClick 中的大写 C - 小部件事件总是使用驼峰式大小写;它们不是实际的 DOM 事件,尽管它们通常映射到类似的 DOM 事件。不过,根据您描述遇到的问题,我得到您使用大写 C 进行测试的印象。

    这是一个简单的想法工作示例(最初由 Dustin Machi 在 Dojo IRC 频道中提供/建议):http://jsfiddle.net/xwFC5/5/

    【讨论】:

    • 它有效,谢谢!!但我刚刚意识到我的问题是不同的。我有一个 dojox.grid.EnhancedGrid,并且我创建了 dijit.Menu。我真正想要的是知道当用户右键单击并选择 MenuItem 时选择了哪一行。我收到的事件没有 rowIndex,我认为这是因为它是由 MenuItem 启动的,而不是由 Grid 启动的。知道在这种情况下如何获得 rowIndex 吗?谢谢!
    • 为了解决这个问题,我首先想到的是连接onCellContextMenu(或任何适合的*ContextMenu事件),从传递给该函数的事件对象中获取所需的任何信息并将其存储在某处(可能在网格实例或公共命名空间中),然后在菜单事件回调中检索并清除它。是的,这是很长的路要走,但它应该可以工作。
    【解决方案2】:

    根据 Ken 对上述答案的评论,我设法解决了这个问题,如下所述:http://blue-networks.net/wp/?p=37 它连接到 onCellContextMenu 并从事件中提取相关信息,并将其保存到网格对象中。

    【讨论】:

    • 请张贴代码,而不仅仅是一个链接。如果链接失效,答案将不再有用。
    猜你喜欢
    • 2017-01-04
    • 2021-09-07
    • 2011-03-12
    • 1970-01-01
    • 2011-07-26
    • 2011-12-07
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多