【问题标题】:Electron window reloads when saved file is overwriten / replaced当保存的文件被覆盖/替换时,电子窗口重新加载
【发布时间】:2021-08-23 18:15:40
【问题描述】:

所以,我编写了保存函数,它在我第一次保存文件时完全按照预期工作。但是,如果我尝试通过再次保存来覆盖文件,文件保存得很好,但窗口会重新加载,清除所有输入的数据。我可以加载保存的文件并继续编辑,但这会很快变得烦人。我在任何地方都找不到有关如何解决此问题的任何信息。任何帮助将不胜感激。

function saveData(){
  let data = {}
  data.item1 = getItem1()
  data.item2 = getItem2()
  data.item3 = getItem3()
  // convert data object to a string
  let dataString = JSON.stringify(data, null, 4)
  // open save dialog and chooses path
  let savePath = dialog.showSaveDialog({filters: [{name: 'Save File', extensions: ['json']},]})
  // save file to disk
  if (savePath != undefined){
    fs.writeFile(savePath, dataString, function(err) {
    // file saved or err
    })
  }
}

这里是菜单模板条目:

{ label: 'File',
  submenu: [
    { label: 'New', click: SendEvent('file-new')},
    { label: 'Open', click: SendEvent('file-open')},
    { label: 'Save', accelerator: 'CmdOrCtrl+S', click: function(){
            saveData();
      }
    },

    { label: 'Save As',
        accelerator: 'CmdOrCtrl+Shift+S',
        click: SendEvent('file-save-as')},
    { label: 'Close', click: SendEvent('file-close')},
    { type: 'separator'},
    { label: 'Quit', accelerator: 'CmdOrCtrl+Q', click: function() {app.quit();}},
    { type: 'separator' },
    { label: 'Print', accelerator: 'CmdOrCtrl+P', click(){win.webContents.print({silent: false, printBackground: false})} }
    ]
},

还有 getItem1 函数:

function getItem1(){
    const item1 = document.getElementById('itemID').src
    return item1
}

【问题讨论】:

  • 您的 HTML 中有 <form> 吗?
  • 不,我只是用 document.getElementById() 收集数据
  • 我猜这与文件替换有关。
  • 所以要明确一点,如果您在第二次保存期间不覆盖文件,则窗口不会重新加载?
  • 正确。只有当我尝试重新保存同名文件时才会发生这种情况。如果我给它一个新名字,它会很好用。

标签: javascript node.js electron


【解决方案1】:

现在我感觉有点笨。事实证明,它重新加载的原因是因为我在保存源文件时使用electron-reload 包自动重新加载页面。当保存文件被覆盖时,它还会导致页面重新加载。很高兴知道前进。

编辑:

你可以告诉electron-reload忽略一个目录,方法是将你的require语句修改成如下所示:

require('electron-reload')(__dirname, {ignored: /<folder_to_be_ignored>|[\/\\]\./});

https://github.com/yan-foto/electron-reload#api

【讨论】:

  • 在不知道是什么触发刷新的 1 小时后登陆这里。谢谢!
猜你喜欢
  • 2020-08-31
  • 2020-06-25
  • 2015-05-05
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多