我无法找到更改上下文菜单标签的方法。我想根据我右键单击的节点类型更改标签。
我试过这个没有成功:
$('#region-sortable').bind('contextmenu', function (e) {
e.preventDefault();
liRegionSelectionne = e.target;
if(liRegionSelectionne.tagName.toLowerCase() == "span"){
menuEditRegion.items[0].label = "Modifier cette Remarque";
}else{
menuEditRegion.items[0].label = "Modifier cette Région";
}
menuEditRegion.popup(remote.getCurrentWindow());
});
我可以在控制台中看到标签在对象items[0]
中被更改,但是当菜单弹出时,标签是我最初声明菜单时放置的标签。
答案 0 :(得分:1)
在GitHub上打开一个问题后,答案是实际上菜单不是动态的,可能不会很长时间。
答案 1 :(得分:0)
我自己遇到过这个问题,想要从渲染器进程中更改菜单。我创建了ipc-flux来处理这个问题。它类似于vuex通量模式。
从那里,在主进程中创建一个操作,将特定菜单标签更改为有效负载中提供的字符串。
然后从渲染器进程
发送它$('#region-sortable').bind('contextmenu', function (e) {
e.preventDefault();
liRegionSelectionne = e.target;
if(liRegionSelectionne.tagName.toLowerCase() == "span"){
ipcFlux.dispatch('main', 'menuItemsLabelChange', 'Modifier cetter Remarque');
} else{
ipcFlux.dispatch('main', 'menuItemsLabelChange', 'Modifier cetter Région');
}
menuEditRegion.popup(remote.getCurrentWindow());
});
答案 2 :(得分:0)
我会做这样的事情:(如果有人需要)
const menuTemplate = [{
label: 'Options',
submenu: [
{
label: 'Menu label',
click() { //do stuff }
}
]
}];
// Change menu items when user login. Fetching value from renderer process
ipcMain.on('logged-in', (event, args) => {
if (args !== true) {
return;
}
// Modify menu item status
menuTemplate[0].submenu[0].label = 'New label';
// Rebuild menu
const menu = Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menu);
});