Javascript 仅在Mac:Electron JS以外的设备上添加子菜单项
我想在我的Electron JS应用程序的文件菜单项下添加退出子菜单项,但仅在Windows和Linux上添加。在Mac上,我已经在app name菜单项下设置了一个Quit子菜单项。目前,这是我的代码: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",
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”
})
}
使用哪一个取决于您;在第二种情况下,如果结构发生变化,您可能需要更新菜单地址。您还应该权衡可读性