电子 - 更新菜单

时间:2017-03-23 13:57:31

标签: menu electron

单击此菜单项时,我尝试更新菜单项上的标签。它应该像click->'show'标签,click->'hide'标签。这是我的代码:

const template = [{
  label: 'Menu',
  submenu: [{
        label: 'Search',
        click() {
            win.webContents.executeJavaScript("showSearch()"); // it run function changeSearch() in main.js
        }
    },
    {
        label: 'Resetuj',
        click() {
            win.loadURL(`file://${__dirname}/index.html?del=1`);
        }
    },
    {
        label: 'Quit',
        accelerator: 'Q+CmdOrCtrl+Q',
        click() {
            win.loadURL(`file://${__dirname}/index.html?logout=1&close=1`);
        }
    }]
}];

changeSearch()我尝试过这样的事情:

Menu.items[0].submenu.items[0].label = "Changed label";

2 个答案:

答案 0 :(得分:1)

我认为你要找的是这样的:

function addMenuItems(items, position) {
const updateSearchItems = [{
    label: 'newOptionDisabled',
    enabled: false,
}, {
    label: 'newOptionWithAction',
    enabled: true,
    key: 'newOptionWIthAction',
}, {
    label: 'Do some stuff',
    visible: false,
    key: 'doSomeStuff',
    click: () => {
        // stuff
    },
}];


 items.splice.apply(items, [position, 0].concat(updateSearchItems));
}

通过将菜单项定义为可以引用的对象,您可以随时修改该对象。在我的示例中,我使用addMenuItems函数,该函数使我能够指定在现有对象中插入这些项的位置。

答案 1 :(得分:0)

我这样做是为了动态地更改/修改菜单项:

const menuTemplate = [{
    label: 'Options',
    submenu: [
       {
         label: 'Hide',
         click() { 
            changeLabel('Show'); // Put logic here
         }
       }
    ]
}];

function changeLabel(label) {
    menuTemplate[0].submenu[0].label = label;

    // Rebuild menu
    const menu = Menu.buildFromTemplate(menuTemplate);
    Menu.setApplicationMenu(menu);
}

此代码未经测试!