单例菜单面板在 extjs 5 中不起作用

singleton menu panel not working in extjs 5

我在使用 extjs 4 时,我使用单例模式为多个工具栏创建了菜单面板,它运行良好,但是当我将我的应用程序从 extjs 4 移动到 extjs 5 时,它停止工作,这意味着菜单面板当鼠标移到它上面时隐藏。我在 fiddle 上创建了一个示例,请给我一些解决这个问题的方法。 fiddle link: singleton menu panel example

谢谢, 桑迪

在 Ext JS 5 中,菜单似乎链接到它们的所有者组件(例如按钮)并且不能在所有者之间共享。这就是为什么在您的示例中,问题仅发生在第一个和第二个面板上,而不是最后一个面板(第三个)上 - 它的按钮成为菜单的 "legal" 所有者,因此它在那里工作正常。

在你的例子中实际上不需要共享菜单。不要重复相同的代码三次,只保留 一个 停靠工具栏,只在 一个 位置使用菜单,并使它更智能。参见示例:https://fiddle.sencha.com/#fiddle/s1b

更新

如果需要在按钮之间共享菜单,可以通过使用自定义按钮来实现,该按钮在每个菜单显示请求中强制确保其菜单属于它自己:

Ext.define('SharingMenuButton', {
    extend: 'Ext.button.Button',
    alias: 'widget.sharingmenubutton',
    showMenu: function() {
        if (this.menu.ownerCmp !== this) {
            this.setMenu(this.menu, false);
        }
        return this.callParent(arguments);
    }
});

请参阅您的示例:https://fiddle.sencha.com/#fiddle/s1g