Javascript 电子多窗口工控机体系结构

Javascript 电子多窗口工控机体系结构,javascript,electron,software-design,Javascript,Electron,Software Design,我计划用electron构建一个软件,它应该有许多不同的窗口。我已经阅读了一本书并研究了文档,以熟悉electronipc模块及其工作原理 这个概念对我来说很有用,有很多可以管理的窗口,但更多的窗口会让我的应用程序变得更加混乱 我还不熟悉javascript和基于原型的面向对象编程 我试图想象如何在不丢失main.js概述的情况下构建一个大型软件 问题是main.js需要为每个窗口使用特定的ipc方法。我想到了一个解决方案,在这个解决方案中,我可以将ipc方法保存在具有相关名称的其他javasc

我计划用
electron
构建一个软件,它应该有许多不同的窗口。我已经阅读了一本书并研究了文档,以熟悉electron
ipc模块及其工作原理

这个概念对我来说很有用,有很多可以管理的窗口,但更多的窗口会让我的应用程序变得更加混乱

我还不熟悉javascript和基于原型的面向对象编程

我试图想象如何在不丢失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)
      })
  })

使用这种方法,我必须在main.js中创建每个窗口(这将增长main.js),并确保为正确的窗口调用特定的ipc方法。 回调方法还需要为每个窗口调用特定的方法

所以我需要很多方法,这个构造看起来不是很灵活


是否有任何最佳实践可以防止main.js发展为“无限”并获得更灵活的ipc方法?

您设想有多少个窗口,它们各自执行不同的任务,还是都执行相同的任务(例如,图像查看器,每个照片打开一个窗口)我想大概有20-30扇窗户。每个窗口都应该执行其他任务。我想建立一个小的账单软件,你设想有多少个窗口,每个窗口都在执行不同的任务,还是都在执行相同的任务(例如,一个图像查看器,每个照片打开一个窗口)?我想大约有20-30个窗口。每个窗口都应该执行其他任务。我想建立一个小票软件
//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
}