Как правильно требовать Electron BrowserWindow в классе - PullRequest
0 голосов
/ 10 ноября 2019

Я довольно новичок в электронах, nodejs и javascript, но я неуклонно подбирал вещи к хорошим результатам, но я столкнулся с небольшим затруднением и не смог найти аналогичную проблему. Тем не менее, я нашел пример того, как кто-то использует требование таким же образом, заставляя меня поверить, что это должно работать просто отлично.

В быстром запуске электрона require ('Electron') используется для загрузки класса BrowserWindow. Так что теперь я пытаюсь сделать то же самое, но в моем классе. Я пытаюсь загрузить модуль в переменную класса, а затем использовать его позже в CreateWindow. Это приводит к исключению «this.BrowserWindow не является конструктором». Если я отправляю модуль из моего Main.js, который загружает модуль точно так же, как при быстром запуске электрона, непосредственно в мой WindowManager в качестве параметра, он работает. Я мог бы сделать это, если нет более приятного способа сделать это, что я чувствую, что есть / должно быть.

Наконец, я вполне уверен, что модуль загружается каким-то образом, в той или иной форме, потому что попыткатребование недопустимого модуля дает мне исключение «Не удается найти модуль».

Итак, мой вопрос здесь, почему я получаю исключение, когда я ожидаю того же поведения, что и в быстром запуске Electron, и какисправить это правильно / элегантно.

Мой класс:

class WindowManager {

    constructor(CCC) {
        this.BrowserWindow = require('electron');
        this.ListManager = new (require('./ListManager.js').ListManager)(CCC);
        this.ListManager.RequestList("Root");
    }

    createWindow(BrowserWindow) {
        // Create the browser window.
        this.mainWindow = new this.BrowserWindow({
            height: 600,
            width: 800,
            webPreferences: {
                preload: 'preload.js',
                nodeIntegration: true
            }
        });

        // and load the index.html of the app.
        this.mainWindow.loadFile('index.html')

        // Open the DevTools.
        // mainWindow.webContents.openDevTools()

        // Emitted when the window is closed.
        this.mainWindow.on('closed', function () {
            // Dereference the window object, usually you would store windows
            // in an array if your app supports multi windows, this is the time
            // when you should delete the corresponding element.
            this.mainWindow = null
        })
    }
}

Быстрый запуск электрона :

// Modules to control application life and create native browser window
const {app, BrowserWindow} = require('electron')
const path = require('path')

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow

function createWindow () {
// Create the browser window.
mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
    preload: path.join(__dirname, 'preload.js')
    }
})

// and load the index.html of the app.
mainWindow.loadFile('index.html')

// Open the DevTools.
// mainWindow.webContents.openDevTools()

// Emitted when the window is closed.
mainWindow.on('closed', function () {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null
})
}

1 Ответ

1 голос
/ 10 ноября 2019

В примере кода «Быстрый запуск в электронном формате» используется ECMAScript 6 Синтаксис объекта (для краткости и удобства).

const {app, BrowserWindow} = require('electron')

эквивалентно:

const app = require('electron').app;
const BrowserWindow = require('electron').BrowserWindow;

Итак, в конструкторе класса WindowManager строка:

this.BrowserWindow = require('electron');

должна быть взамен:

this.BrowserWindow = require('electron').BrowserWindow;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...