2017-03-07 56 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後支持更改菜單對象,行爲是如果用戶對未定義的。

相關問題