Когда я запускаю это и нажимаю на элемент подменю для «портов», я продолжаю получать эту ошибку, чем mainWindow не определено.Это почему?Вы можете видеть, что я определил это в файле main.js, так почему же он не регистрируется в файле menu.js?
Конечная цель здесь заключается в том, что, когда я нажимаю на правильный порт в меню, яЯ могу отправить это значение в средство визуализации, чтобы я мог подключить SerialPort к правому последовательному порту справа.
Main.js
const { app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
let mainWindow
function createWindow() {
mainWindow = new BrowserWindow({ width: 1200, height: 600 })
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
mainWindow.webContents.openDevTools()
mainWindow.on('closed', function () {
mainWindow = null
})
require('./menu/menu')
}
app.on('ready', createWindow)
app.on('window-all-closed', function () {
app.quit()
})
app.on('activate', function () {
if (mainWindow === null) {
createWindow()
}
})
Меню.js
const { Menu, ipcMain, webContents } = require('electron')
const electron = require('electron')
const app = electron.app
const template = [
{
label: 'Edit',
submenu: [
{ role: 'undo' },
{ role: 'redo' }
]
},
{
label: 'Ports',
submenu: [
{
label: 'select port',
submenu: []
}
]
},
{ label: 'Help' }
]
if (process.platform === 'darwin') {
template.unshift({
label: app.getName(),
submenu: [
{ role: 'about' },
{ type: 'separator' },
{ role: 'services' },
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideothers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
]
})
}
ipcMain.on('serialPorts', (event, data) => {
let portsSubMenu = []
data.forEach((port) => {
portsSubMenu.push({
label: port.comName,
click(menuItem, browserWindow, event) {
mainWindow.webContents.send('portSelected', port)
}
})
})
template[2].submenu[0].submenu = portsSubMenu
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
})