我打算用electron
构建一个软件,该软件应具有许多不同的窗口。我已经读过一本书并研究了文档,以熟悉电子ipc module
及其工作原理。
这个概念对我来说很有效,窗口数量可控,但是我的应用程序使用的窗口甚至更多,变得更加令人困惑。
我也是JavaScript和Prototype-based object-oriented programming
我试图想象如何在不失去main.js概述的情况下构建大型软件。
问题在于main.js对于每个单个窗口都需要特定的ipc方法。我想到了一种解决方案,其中我可以将ipc方法保存在其他具有相关名称的javascript文件中。
例如,现在我需要在main.js中做
ipcMain.on('window1-call1' .. {
//do stuff
}
ipcMain.on('window1-call2' .. {
//do stuff
}
ipcMain.on('window2-call1' .. {
//do stuff
}
and so on .....
以下是我的main.js
,preload.js
和renderer.js
中的一个例子
展示我如何构建一个简单的IPC示例:
//main.js
ipc.on('open-directory-dialog', function (event) {
dialog.showOpenDialog(mainWindow, {
title: 'Select a image...',
properties: ['openFile'],
defaultPath: '/home',
buttonLabel: "Select...",
filters: [
{ name: 'Images', extensions: ['jpg', 'png', 'gif'] }
]
}, function (files) {
if (files) event.sender.send('selectedItem', files)
})
})
//preload.js
window.ipcFiledialog = function (channel) {
ipcRenderer.send('open-directory-dialog')
}
//callback
ipcRenderer.on('selectedItem', function (event, path) {
setSelectedItem(path)
})
//renderer.js
selectDirBtn.addEventListener('click', function (event) {
window.ipcFiledialog('open-directory-dialog')
})
function setSelectedItem (files) {
document.getElementById('selectedItem').innerHTML = files
}
使用这种方法,我必须在main.js中创建每个窗口(这会增加main.js),并确保为正确的窗口调用特定的ipc方法。 回调方法还需要为每个窗口调用一个特定的方法。
所以我需要很多方法,而且这种构造看起来不太灵活。
是否有最佳实践来防止main.js增长为“无限”并获得更灵活的ipc方法?