2017-03-07 6 views
1

私の電子アプリには、サブメニューとして「最近開いた」項目を持つアプリケーションメニューがあります。このサブメニューのエントリは、最近アクセスした10個のドキュメントを提供します。このメニューは、アプリケーションが起動してすべて正常に動作するときに設定されます。しかし、「最近アクセスした」ドキュメントの対象となるためには、アプリケーションの開始時だけでなく、時々このリストを更新する必要があります。どうすればこれを達成できますか?電子アプリケーションメニューのアイテムを実行時に変更する方法は?

この

  1. に2つの特定のサブの質問私はこれを更新することができますがありますか? ユーザーがトップレベルのメニュー項目をクリックしたときにコールバックを探していましたが、このリストを更新するコード を実行できました。しかし、私はそれを働かせることができませんでした。 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を呼び出した後、メニューオブジェクトの変更をサポートしていませんので、私はこれを閉じていたユーザがそれをした場合、動作は未定義です。

関連する問題