2017-03-07 52 views
1

我的电子应用程序有一个应用程序菜单,它具有“打开最近”条目作为子菜单。该子菜单中的条目给出10个最近访问的文档。我在应用程序启动时填充这个菜单,并且一切正常。然而,为了有资格成为“最近”访问的文档,我不时刷新此列表,而不仅仅是在应用程序启动时。我怎样才能做到这一点?如何在运行时更改电子应用程序菜单中的项目?

有两个具体的子问题,这

  1. 我什么时候可以更新吗?我在寻找一些回调,当 用户点击顶级菜单项,我可以运行代码 刷新此列表。但我无法让它工作。 MenuItem唯一的 回调是'点击',如果 它有一个子菜单定义它似乎不工作。解决此问题的方法是调用 setInterval并定期更新菜单条目,如最少为1 。但如果有回调,我可以做到这一点,我宁愿 那。
  2. 我该如何更新?我使用Menu.buildFromTemplate()创建一个新的菜单,然后将其分配给应用程序菜单层次结构中的submenu条目(我第一次创建它时已保存对应用程序菜单的引用)。但这不起作用。

回答

0

看起来好像setMenu是您唯一的选择。至于什么时候这样做 - 对于“打开最近”功能,我认为您可以在打开文档(或关闭文档后)时执行此操作:将文档添加到菜单模板并再次拨打setMenu


这是从2014但听起来好像它是定义的行为:

Modifying Menu object after setMenu can produce unregistered/dangling accelerators #846

在原子壳的正确的方式来更新菜单栏或应用菜单是 调用BrowserWindow.setMenu或app.setApplicationMenu 每次修改后的Menu对象。

这是因为菜单实际上充当模型,以及本机菜单是没有创建,直到你打电话的SetMenu,因此,如果您更改模型,而不 更新本机菜单,坏的事情都可能发生 。我们使用这个设计 ,因为它完全代表Chromium使用的菜单库,而大多数菜单是静态的。

但我认为我们应该找到一种方法来防止崩溃,并使其在文档中清晰可见 。

和:

我关闭这个因为我们不 调用的SetMenu后支持更改菜单对象,行为是如果用户对未定义的。

相关问题