电子多窗口IPC架构

时间:2019-06-28 18:45:38

标签: javascript electron software-design

我打算用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.jspreload.jsrenderer.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方法?

0 个答案:

没有答案