2017-02-22 62 views
0

Я ранее писал (а) этот вопрос Stacking of Context Menus in Electron и создал этот вопрос в context menu module for electron.Как удалить регистрацию контекстного меню listerners в электронном

Несмотря на то, что мой вопрос выше довольно подробный, он не получил ответов. Затем, @sindresorhus рекомендуется задать этот вопрос в StackOverflow:

Как отключить контекстное меню в электронном? У меня есть программа, в которой, в зависимости от того, где вы щелкнули, другое контекстное меню будет отображаться:

handleContextMenu() { 
    this.props.contextMenu({ 
     prepend: (params, browserWindow) => [{ 
     label: `Summary ${this.state.msn}`, 
     click:() => this.createSummary() 
     },{ 
     label: `Library Compare ${this.state.msn}`, 
     click:() => this.runLibCompare() 
     },{ 
     label: `Visualize ${this.state.msn}`, 
     click:() => dialog.showMessageBox({ 
      type: 'question', 
      buttons: this.vizButtons, 
      defaultId: 0, 
      title: `Choose your visualization`, 
      message: `Choose your visualization for ${this.state.msn}.`, 
      }, res => this.visualize(res)) 
     }] 
    }); 
    }; 

Однако, когда я щелкните правой кнопкой мыши на другой области, первое контекстное меню всплывает, то второй, пока не появится текущее контекстное меню.

Я в основном хочу удалить регистрационное меню после его увольнения. Как мне это сделать?

Update: Избавился контекстного меню и просто подают это handleContextMenu функции:

handleContextMenu = menuItems => { 
    const menu = new electron.remote.Menu(); 
    menu.append(new electron.remote.MenuItem(menuItems)); 
    menu.popup(electron.remote.getCurrentWindow()); 
    } 

И это работает! Вот так, избавился от электронного контекстного меню.

ответ

1

Это возможно со стандартом Electron Menu API без дополнительных модулей, возможно, с использованием electron-context-menu просто усложняет ситуацию, поскольку, похоже, оно предназначено для упрощения работы для конкретного случая использования стандартного контекстного меню. С помощью стандартного API меню вы можете создавать и всплывать меню по каждому клику, поэтому нет необходимости «де-регистрировать» меню.

Вот упрощенный пример, создавая различные новые контекстное меню с каждым щелчком мыши:

let menuCount = 1; 
window.addEventListener('contextmenu', (e) => { 
    e.preventDefault(); 
    let menu = new electron.remote.Menu(); 
    menu.append(new electron.remote.MenuItem({label : "Context Menu "+menuCount++})) 
    menu.popup(electron.remote.getCurrentWindow()); 
}); 

На первом правой кнопкой мыши, вы увидите меню с пунктом «Контекстное меню 1», на второй справа -click, «Контекстное меню 2» и т. д.

+0

Нет. Я заменил свой код вашим точным предложением, и я до сих пор получаю эффект укладки. Теперь он говорит n ... n-1 ... 3 ... 2 ... 1 –

+0

Интересно, если я нужно придумать способ удалить меню из eventLisenter? –

+0

Ой, подождите ... Думаю, я понял. Я удалил window.addEventListener, и он, кажется, не повторяется. Позвольте мне рассказать об этом еще –