Можно ли вывести код шаблона меню «Электрон»? - PullRequest
0 голосов
/ 26 января 2020

У меня есть приложение Electron с 3 windows, и у каждого окна есть свое меню. Код шаблона меню для каждого меню довольно длинный, и я хотел бы его использовать. Пока что ничего из того, что я пробовал, не работает.

Я пробовал разные способы "модульности", но получил много ошибок. Приведенный ниже подход работает для настройки меню, но ни одна из функций, на которые есть ссылки в меню, не работает (например, quitApplication).

То, что я пытаюсь сделать, не возможно, или я просто "делаю это неправильно "?

enter image description here

var test = require("./app/js/menuTest.js");
var tm = new test();    
var menuTemplate = tm.getMenu();
myWindow = Menu.buildFromTemplate(menuTemplate);

menuTest. js

function testMenu() {
 this.getMenu = function () {
        var menuTemplate = [
            {
                label: global.productData.appName,
                submenu: [
                    { label: 'About ' + global.productData.appName, click: () => { showAboutWindow() } },

                    { type: 'separator' },
                    { role: 'hide' },
                    { role: 'hideothers' },
                    { role: 'unhide' },
                    { type: 'separator' },
                    { label: 'Quit', click: () => { quitApplication() }, accelerator: 'CmdOrCtrl+q' }
                ]
         // code deleted for clarity
        return menuTemplate;
    }
}
module.exports = testMenu;

1 Ответ

0 голосов
/ 03 февраля 2020

Исходя из того, как я понимаю ваш вопрос, вы хотите убрать код шаблона из сценария основного процесса, но сохранить функции там.

Это может быть достигнуто путем перемещения объекта структуры меню в отдельный объект. модуль. Модуль экспортирует функцию, которая принимает объект со ссылками на функции, которые вы хотите вызвать в меню.

Я считаю, что это не добавляет существенной сложности и «экстернализует» только код шаблона меню.

menu1. js:

module.exports = function(actions) {
    return [
        {
            label: "Foo",
            submenu: [
                { label: "Bar", click: actions.bar },
                { label: "About", click: actions.about }
            ]
        }
    ];
}

main. js:

const {app,BrowserWindow,Menu} = require("electron");

const actions = {
    bar: function () {
        console.log("bar");
    },
    about: function () {
        console.log("about");
    }
};

const menu1_template = require("./menu1.js")(actions);
const menu1 = Menu.buildFromTemplate(menu1_template);
Menu.setApplicationMenu(menu1);

let mainWindow;

app.on("ready", function() {
    mainWindow = new BrowserWindow();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...