【发布时间】: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