Javascript 电子菜单动态更改项目标签
我找不到更改上下文菜单标签的方法。我想根据右键单击的节点类型更改标签 我尝试过这个,但没有成功:Javascript 电子菜单动态更改项目标签,javascript,electron,contextmenu,Javascript,Electron,Contextmenu,我找不到更改上下文菜单标签的方法。我想根据右键单击的节点类型更改标签 我尝试过这个,但没有成功: $('#region-sortable').bind('contextmenu', function (e) { e.preventDefault(); liRegionSelectionne = e.target; if(liRegionSelectionne.tagName.toLowerCase() == "span"){ menuEditR
$('#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());
});
我可以在控制台中看到,对象
项[0]
中的标签已更改,但当菜单弹出时,标签就是我最初声明菜单时放置的标签 我自己也遇到了这个问题,想从渲染器进程中更改菜单。我创造来处理这个。它类似于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());
});
在GitHub上打开一个问题后,答案是菜单实际上不是设计为动态的,而且可能不会持续很长时间
请看我会这样做:(以防有人需要)
我修改了界面,添加了一个菜单项,并修改了代码以启用或禁用该选项。即使cod仍然在renderer it works.IMO中,这里的关键点是重新创建整个菜单实例并重新分配它。当我尝试更新托盘上下文菜单时,它为我工作。我发现了这一点,所以每次需要更改文本时,我都会重建菜单。我很想知道是否有人有更好的解决办法。
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);
});