2017-12-11 6 views
0

표준 전자 메일 응용 프로그램과 마찬가지로 전자 메일 응용 프로그램은 실제 사용 결과를 기반으로 여러 메뉴 항목의 상태 (활성화/비활성화)를 변경해야합니다.Electron의 메뉴 항목 상태를 동적으로 변경하십시오.

내가 main.js 내 메뉴를 설정하고있다 :

function createWindow() { 
... 
... 
    require('./menu/mainmenu'); 
} 

MenuItem과 나는 MAINMENU에 정의되어 변경해야

{ label: "Show Colors", 
     accelerator: 'CmdOrCtrl+1', 
     enabled: getStatus(), 
     click() {getWebviewWebContents().send('switchToColors');} 
}, 

getStatus()false 또는 true을 반환하는 기능입니다.

이 모든 것은 Electron에서 작동하지 않습니다. 메뉴가 응용 프로그램 시작시 만들어지며 전혀 수정할 수 없기 때문입니다. 동적 메뉴 항목이 매우 일반적 (예 : 메뉴 체크 상자, 사용함/사용 안 함 등)이기 때문에 이것이 심각한 결함이라고 생각합니다.

해결 방법이 있습니까?

답변

0

나는 메뉴 항목에 ID를 설정하여이 문제를 해결 한,

{ label: "Show Colors", 
     id: 'color-scale', 
     accelerator: 'CmdOrCtrl+1', 
     enabled: getStatus(), 
     click() {getWebviewWebContents().send('switchToColors');} 
}, 

와 함께 메뉴 항목을 받고 : 내가 활성화해야 할 때

myItem = menu.getMenuItemById('color-scale') 

그런 다음,/프로그래밍 방식을 사용하지 않도록 설정, 내가 사용하고 있습니다 :

myItem.enabled = true 

또는

myItem.enabled = false 
0

지금까지 제가 알고 있고 사용하는 유일한 해결책은 menuitem이 변경 될 때마다 전체 메뉴를 재구성하는 것입니다. 이는 인체 공학적으로 친숙하지는 않지만 충분히 빠르게 작동하고 오버 헤드가 많이 발생하지 않습니다.

+0

그게 제가 이미 시도했지만 성공하지 못했습니다. 메뉴가 캐시에 무엇인가를 유지하는 것처럼 보입니다. 그리고 다시 빌드 할 때마다 (false로 설정 한 변수를 true로 변경해도 동일합니다.) –

+0

다시 작성한 후에 매번 메뉴를 명시 적으로 설정 했습니까? (setApplicationMenu) –