Extjs 子菜单在 Chrome 43 上消失

Extjs Submenus disappear on Chrome 43

如何解决子菜单在 Chrome 43 中消失的问题?

使用 Extjs 4.

这适用于 Chrome 的早期版本。

需要添加此覆盖以解决此问题。

https://www.sencha.com/forum/showthread.php?301116-Submenus-disappear-in-Chrome-43-beta

(感谢 Sencha 论坛上的 festr 用户 - 认为这也需要在 SO 上)

// fix hide submenu (in chrome 43)
Ext.override(Ext.menu.Menu, {
    onMouseLeave: function(e) {
    var me = this;


    // BEGIN FIX
    var visibleSubmenu = false;
    me.items.each(function(item) { 
        if(item.menu && item.menu.isVisible()) { 
            visibleSubmenu = true;
        }
    })
    if(visibleSubmenu) {
        //console.log('apply fix hide submenu');
        return;
    }
    // END FIX


    me.deactivateActiveItem();


    if (me.disabled) {
        return;
    }


    me.fireEvent('mouseleave', me, e);
    }
});

关于相同的 link、https://www.sencha.com/forum/showthread.php?301116-Submenus-disappear-in-Chrome-43-beta,由于 post siq 的#27:

,这里有一个更一般的、非特定的修复
Ext.apply(Ext.EventManager,{
    normalizeEvent: function(eventName, fn) {

        //start fix
        var EventManager = Ext.EventManager,
            supports = Ext.supports;
        if(Ext.chromeVersion >=43 && eventName == 'mouseover'){
            var origFn = fn;
            fn = function(){
                var me = this,
                    args = arguments;
                setTimeout(
                    function(){
                        origFn.apply(me || Ext.global, args);
                    },
                    0);
            };
        }
        //end fix

        if (EventManager.mouseEnterLeaveRe.test(eventName) && !supports.MouseEnterLeave) {
            if (fn) {
                fn = Ext.Function.createInterceptor(fn, EventManager.contains);
            }
            eventName = eventName == 'mouseenter' ? 'mouseover' : 'mouseout';
        } else if (eventName == 'mousewheel' && !supports.MouseWheel && !Ext.isOpera) {
            eventName = 'DOMMouseScroll';
        }
        return {
            eventName: eventName,
            fn: fn
        };
    }
});

这已经在我这边进行了测试,我可以验证它是否有效 (v. 4.1.2)。