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);
});