首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子:如何从渲染过程中填充菜单?

问电子:如何从渲染过程中填充菜单?
EN

Stack Overflow用户
提问于 2020-02-08 08:32:04
回答 1查看 877关注 0票数 0

我想为电子应用程序创建一个最受欢迎的或最近打开的文档菜单。打开这些文档后,我可以轻松地跟踪它们,但是如何动态地将它们添加到菜单中呢?

到目前为止,我学到的是:

  • 在主进程中创建一个菜单: menu=[ {标签:‘一些应用程序’,子菜单:[{标签:Open …,加速器:'CmdOrCtrl+O',id:‘打开’,单击:发送},{标签:Documents …,id:'DOCUMENTS',单击:发送,子菜单:[] },{type:‘分离器’},{角色:quit,加速器:'CmdOrCtrl+Q‘} },];
  • 在呈现过程中使用remote: const electron=require(‘ipcRenderer’);const { ipcRenderer,shell,remote }=电子;const {app,BrowserWindow,对话框,菜单,MenuItem}=remote;

我有一个JSON文件中的文档,但是我不知道接下来如何将它们添加到上面的Documents菜单中。

EN

回答 1

Stack Overflow用户

发布于 2020-02-08 14:37:12

我一直在调查这个“最近”;-)

这是一个内置的特性:壮举:最近文档菜单项#11166

代码语言:javascript
复制
 {
      label: 'Open Recent',
      role: 'recentdocuments',
      submenu: [
        {
          label: 'Clear Recent',
          role: 'clearrecentdocuments'
        }
      ]
    },

App.addRecentDocument(路径)和app.clearRecentDocuments()可以使用。电子8添加了以下特性:dontAddToRecent到Windows showOpenDialog

我已经能够让它在macOS上工作了,尽管我还没有弄清楚如何(通过electron-builder,我猜)做申请登记,这是让它在Windows上工作所必需的。

我还看到了这里下面的代码片段,但我还没有机会对其进行测试。另外,请注意,remote将在电子9:取消“远程”模块并将其移动到用户中被废弃。

代码语言:javascript
复制
function updateRecents(path, clear = false) {
  const currentMenu = Menu.getApplicationMenu();
  if (!currentMenu) return;

  const recents = getItemByKey(currentMenu, 'recents');
  if (!recents) return;

  // Clear menu if requested.
  if (clear) {
    config.set('recentDocuments', []);
    recents.submenu.clear();
    recents.submenu.append(new MenuItem({ key: 'null', label: 'No Recent Documents', enabled: false }));
    Menu.setApplicationMenu(currentMenu);
    return;
  }

  const item = new MenuItem({
    label: require('path').basename(path),
    click: () => this.open(path)
  });

  // If first recent item clear empty placeholder.
  if (recents.submenu.items[0].key == 'null') {
    recents.submenu.clear();
    recents.submenu.append(item);
  }
  // Limit to maximum 10 recents.
  else if (recents.submenu.items.length >= 10) {
    const items = recents.submenu.items;
    recents.submenu.clear();
    items.push(item);
    items.slice(10).forEach((i) => recents.submenu.append(i));
  }
  // Otherwise just add item.
  else recents.submenu.append(item);

  // Update application menu.
  Menu.setApplicationMenu(currentMenu);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60125178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档