动态更改Electron菜单项的状态

Fab*_*cca 5 javascript node.js electron

像在任何标准本机应用程序中一样,我的电子应用程序也需要根据实时使用结果来更改几个菜单项的状态(启用/禁用)。

我在main.js中设置菜单:

function createWindow () {
...
...
  require('./menu/mainmenu');
}
Run Code Online (Sandbox Code Playgroud)

我需要更改的MenuItem在mainmenu中定义:

{ label: "Show Colors",  
        accelerator: 'CmdOrCtrl+1', 
        enabled: getStatus(),
        click() {getWebviewWebContents().send('switchToColors');} 
 },
Run Code Online (Sandbox Code Playgroud)

getStatus()函数在哪里返回falsetrue

所有这些在Electron中都不起作用,因为菜单是在应用程序启动时创建的,根本无法修改。我相信这是一个严重的不足,因为动态菜单项非常常见(即:菜单复选框,启用/禁用等)。

有什么解决方法吗?

Fab*_*cca 12

我已通过将ID设置为菜单项来解决此问题,

{ label: "Show Colors",  
        id: 'color-scale',
        accelerator: 'CmdOrCtrl+1', 
        enabled: getStatus(),
        click() {getWebviewWebContents().send('switchToColors');} 
 },
Run Code Online (Sandbox Code Playgroud)

并通过以下方式获取菜单项:

myItem = menu.getMenuItemById('color-scale')
Run Code Online (Sandbox Code Playgroud)

然后,当我需要以编程方式启用/禁用它时,我正在使用:

myItem.enabled = true
Run Code Online (Sandbox Code Playgroud)

要么

myItem.enabled = false
Run Code Online (Sandbox Code Playgroud)