Электронная многооконная архитектура IPC - PullRequest
1 голос
/ 28 июня 2019

Я планирую создать программное обеспечение с 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...