Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅在Mac:Electron JS以外的设备上添加子菜单项_Javascript_Menu_Electron_Menuitem - Fatal编程技术网

Javascript 仅在Mac:Electron JS以外的设备上添加子菜单项

Javascript 仅在Mac:Electron JS以外的设备上添加子菜单项,javascript,menu,electron,menuitem,Javascript,Menu,Electron,Menuitem,我想在我的Electron JS应用程序的文件菜单项下添加退出子菜单项,但仅在Windows和Linux上添加。在Mac上,我已经在app name菜单项下设置了一个Quit子菜单项。目前,这是我的代码: function createMenu(){ const isMac = process.platform === 'darwin'; const menu = [ { label: "File",

我想在我的Electron JS应用程序的文件菜单项下添加退出子菜单项,但仅在Windows和Linux上添加。在Mac上,我已经在app name菜单项下设置了一个Quit子菜单项。目前,这是我的代码:

function createMenu(){
    const isMac = process.platform === 'darwin';
    const menu = [
        
        {
            label: "File",
            submenu: [
                {
                    label: 'Add expense',
                },
                !isMac && { 
                    label: 'Quit',
                    click(){
                        app.quit()
                    },
                    accelerator: 'Ctrl+Q'
                }
            ]
        },
        {
            label: "Menu2",
            submenu: [{label: 'Ok'}]
        }
    ];


    // Mac First Item in Template refers to app name (won't be able to override unless you package application)
    isMac && menu.unshift({
        label: app.name,
        submenu: [
            {
                label: 'About',
                click(){
                    open('https://www.google.com') // Using the open package
                }
            }, 
            {
                label: 'Quit',
                click(){
                    app.quit()
                },
                accelerator: 'Cmd+Q'
            }
        ]
    })


    return menu;
    
}
然而,当我运行这个程序时,我得到一个错误

TypeError: Invalid template for MenuItem: must have at least one of label, role or type
我该怎么做呢


谢谢大家!

之所以会出现错误,是因为您试图有条件地将对象插入列表文字

//非macOS案例:
>[{“foo”:15},true&&{“bar”:123}]
[{foo:15},{bar:123}]
//马科斯案:
>[{“foo”:15},false&&{“bar”:123}]
[{foo:15},错]
在后一种情况下,您将在数组中插入
false
元素,这就是为什么会出现错误

如果您想使用这种速记,可以使用:

[{“foo”:15},…(真?[{“bar”:123}]:[])]
[{foo:15},{bar:123}]
>[{“foo”:15},…(假?[{“bar”:123}]:[])]
[{foo:15}]
在您的用例中,这将使您:

const菜单=[
{
标签:“文件”,
子菜单:[
{
标签:“添加费用”,
},
…(!isMac)?[{
标签:“退出”,
单击(){
app.quit()
},
加速器:“Ctrl+Q”
}]:[]
]
},
{
标签:“Menu2”,
子菜单:[{标签:“确定”}]
}
];
或者,您可以简单地调整菜单模板:

const菜单=[
{
标签:“文件”,
子菜单:[
{
标签:“添加费用”,
}
]
},
{
标签:“Menu2”,
子菜单:[{标签:“确定”}]
}
];
如果(!isMac){
菜单[0][“子菜单”]。按({
标签:“退出”,
单击(){
app.quit()
},
加速器:“Ctrl+Q”
})
}
使用哪一个取决于您;在第二种情况下,如果结构发生变化,您可能需要更新菜单地址。您还应该权衡可读性