Электрон Диалог не сохраняет файл - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь следовать этому уроку , и в нем есть раздел, где нажимается кнопка. Откроется диалоговое окно для сохранения содержимого текстового поля в виде текстового файла. Это включено в файл main.js. Однако, когда я запускаю его, открывается окно, но когда я нажимаю сохранить, файл не сохраняется.

const ipcMain = require('electron').ipcMain
const fs = require('fs')
const { dialog } = require('electron')

ipcMain.on('clickedbutton', (event, data) => {

    dialog.showSaveDialog({ 
        filters: [{ name: 'text', extensions: ['txt'] }
        ]},function (fileName) {

            if(fileName === undefined) return
            fs.writeFile(fileName, data, function (err) {

            })

     });

})

Я не понимаю, как аргумент fileName передается функции. Затем я попытался разделить вызов диалогового окна и функцию, как предложено в этом вопросе SO , но здесь fileName - это объект, который не работает.

ipcMain.on('clickedbutton',(event,data) => {

    var fileName = dialog.showSaveDialog({});

    fs.writeFile(fileName,data,function(err){});

})

Чего мне не хватает?

1 Ответ

1 голос
/ 12 апреля 2020

Учебник, на который вы ссылаетесь, устарел. Функции dialog изменились в Electron 6, из API-интерфейса на основе обратного вызова (который есть в вашем коде) на API на основе обещаний.

Для Electron> = 6 вы хотите сделать следующее внутри функции async. Обратите внимание, что вы можете заменить эту функцию на dialog.showSaveDialogSync, если хотите запустить ее синхронно.

  const { filePath, canceled } = await dialog.showSaveDialog({
    defaultPath: "text.txt"
  });

  if (filePath && !canceled) {
    const data = new Uint8Array(Buffer.from('Hello Node.js'));
    fs.writeFile(filePath, data, (err) => {
      if (err) throw err;
      console.log('The file has been saved!');
    });
  }

Обратите внимание на изменение параметра с filters на defaultPath, поскольку я предполагаю, что вы хотите установите имя файла по умолчанию вместо рендеринга существующих файлов, которые не text.txt не могут быть выбраны в диалоговом окне.

См. минимальный пример , открываемый в Electron Fiddle . В этом примере диалоговое окно открывается непосредственно при открытии окна браузера.

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