簡體   English   中英

如何使 Electron window object 可以從異步 ZC1C425268E68385D1AB5074C17A94F1 內部訪問?

[英]How to make Electron window object accessible from within async function without global?

我正在嘗試在應用程序菜單可訪問的 Electron 應用程序中創建 BrowserWindow object 的實例,因此菜單命令可以使用該引用打開 IndexedDB 數據庫。 因為我在立即調用的異步 function 中實例化 mainWindow,所以尚不清楚如何最好地使 object 在所需文件中的代碼中可用。

index.js(主進程)

let mainWindow;
//other code here

(async () => {
    await app.whenReady();
    Menu.setApplicationMenu(menu);

    mainWindow = await createMainWindow();
    //make mainWindow available in required menu.js file
    //so it can be referenced from menu command
    //to access indexedDB database

})();

我希望 object 可以在 index.js 所要求的 menu.js 中訪問。

    //menu setup
    {
        label: "Add Item to Database",
        click() {
                  //undefined unless object can be imported
                  //dialog code for inputting data to be added
                  mainWindow.webContents.send("addItem", data);
                }
    },

我可以將 mainWindow 存儲在全局 object 中,但我試圖避免這種情況。 我還可以在菜單 object 上創建一個方法並將其存儲在那里,因為它可以在 menu.js 中訪問。 我不確定這是否是個好主意。 而且我想我可以簡單地將 menu.js 代碼添加到 index.js 中,因為 mainWindow 將位於 scope 中,並且在使用菜單命令時已被分配。 但我假設有更好的方法來做到這一點。 建議?

要在不使用全局變量的情況下傳遞 object,一般模式是使用 function arguments。

看起來menu.js現在導出了object 相反,您可以導出返回object 的 function。

然后,而不是調用Menu.setApplicationMenu(menu); ,你會打電話給Menu.setApplicationMenu(menu(mainWindow)); 你對go很好。

這是menu.js的示例:

module.exports = (mainWindow) => {
  label: "Add Item to Database",
  click: ()  => {
    //undefined unless object can be imported
    //dialog code for inputting data to be added
    mainWindow.webContents.send("addItem", data);
  }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM