2017-02-22 8 views
0

이전에이 질문을 Stacking of Context Menus in Electron 님에게 작성하고 context menu module for electron에이 문제를 작성했습니다.컨텍스트 메뉴 리스너를 전자 메일에 등록 취소하는 방법

위의 질문에 대한 답변이 매우 자세하지만 답변이 없습니다. 그럼, @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)) 
     }] 
    }); 
    }; 

그러나, 첫 번째 상황에 맞는 메뉴가 다음 두 번째 팝업, 현재 상황에 맞는 메뉴가 나타날 때까지

기본적으로 문맥 메뉴가 해제 된 후 등록 취소하고 싶습니다. 어떻게해야합니까?

업데이트 : 는 상황에 맞는 메뉴를 제거하고 간단 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를 사용하면 각 클릭에 메뉴를 만들고 팝업 할 수 있으므로 메뉴를 "등록 취소"할 필요가 없습니다. 두 번째 오른쪽 첫 번째 마우스 오른쪽 단추로 클릭 한 항목이있는 메뉴가 표시됩니다 "컨텍스트 메뉴 1"에

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()); 
}); 

:

여기에 간단한 예는 각각의 클릭으로 다른 새로운 상황에 맞는 메뉴를 생성입니다 - 클릭, "컨텍스트 메뉴 2"등.

+0

아니요. 내 코드를 정확한 제안으로 바꿨지만 여전히 스태킹 효과가 나타납니다. 이제 n ... n-1 ... 3 ... 2 ... 1 –

+0

이벤트에서 메뉴를 제거 할 수있는 방법을 찾아야합니다 .Lisenter? –

+0

오, 기다려 ... 내가 가지고 있다고 생각해. window.addEventListener를 제거했는데 반복되지 않는 것 같습니다. 나를 좀 더 살피 게 하렴 –