【问题标题】:ExtJs bubble menu eventExtJs 气泡菜单事件
【发布时间】:2014-02-18 07:00:03
【问题描述】:

我的 ExtJs 菜单定义如下。我在菜单项“hookMethod”和“handlerMethod”中添加了两个自定义方法。 'hookMethod' 是根据某些条件添加的。我将单个菜单项的单击事件冒泡到根菜单。 然后检查是否定义了钩子,然后调用“hookMethod”,否则直接调用“handlerMethod”。我面临的问题是点击监听器被调用了两次,一次用于 menuitem,一次用于菜单。另外,什么是 e 论点。我在想它只会为菜单调用一次,我将有一些方法来检索在其中单击的实际菜单项。

{
    xtype: "menu",
    listeners: {
        click: function(item, e, eopts)
        {
            if(item.hookMethod) { 
                item.hookMethod(item.handlerMethod);
            }
                else {
               item.handlerMethod(this);
            }
         }
    },
    items: [{
        xtype: "menuitem",
        text: "Process Record",
        bubbleEvents: ['click'],
        hookMethod: function(actualMethod)
        {
            //do some pre-processing here and then call the actual handler
            actualMethod(args)
        },
        handlerMethod: function(args)
        {
            //Do actual processing
        },
    }]
}

【问题讨论】:

    标签: extjs


    【解决方案1】:

    Ext.menu.Menuclick( menu, item, e, eOpts ) 事件有四个参数。

    第一个参数是menu 对象本身。

    第二个item 参数是被点击的菜单项的对象。此参数可用于确定单击了菜单中的哪个项目。

    【讨论】:

    • 感谢您的回复。但是为什么它被调用了两次呢?还有 4 个参数(menu、item、e、eopts)仅在第二次调用时出现。但在第一次调用时,它有 3 个参数(item、e、eopts)。
    • 这是因为您的项目配置中有bubbleEvents: ['click'],。所以第一个捕获的事件来自menuitem,第二个捕获的事件来自menu本身。所以删除你的bubbleEvents 配置,只听menu click 事件。
    • 感谢它的工作。但是,我想如果我将它冒泡,它不会导致点击菜单项?
    • bubbleEvents 配置中,您可以设置将冒泡到任何父容器的事件。因此,您在 menu 组件上配置的 click 事件侦听器捕获了这两个事件 - 来自 menuitem 组件的冒泡 click 事件和来自 menu 组件的 click 事件
    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 2018-11-20
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多