nw.js怎么打开文件选择对话框,并保存文件?

发布于 2022-09-02 00:34:04 字数 1654 浏览 17 评论 0

新手,学习nw.js开发一款markdown编辑器,想要实现点击save按钮就弹出文件选择对话框,如下:

然后把md_editor里文字保存成md文件。我写的代码如下(在index.html里有<input type="file" id="fileDialog" nwsaveas />):

<script>
    var fs=require("fs");
    var text = $("#md_editor").val();
    $("#save").click(function(){
        var input = $("#fileDialog");
        input.trigger("click");
        var dirr = input.val();
        fs.writeFile(dirr,text,function(err){
            if(err) throw err;
            alert("File Saved!!");
        });
    });
</script>

这段代码运行不成功,原因在于当input.trigger()执行但是用户还没有选择好文件保存地址时,后面代码已经运行,这时dirr的值是空值,所以fs.writeFile运行失败。

在我的另一个问题中,@公子 建议

$("#fileDialog").on("change", function() {
    var dirr = input.val();
    fs.writeFile(dirr,text,function(err){
        if(err) throw err;
        alert("File Saved!!");
    });
});

也有一些问题,比如如果保存两次,且保存位置、文件名一样,那么就不会触发change事件,也就不会保存新文档了。

后来我就又想能不能用while循环来阻塞input,如下第八行:

<script>
    var fs=require("fs");
    var text = $("#md_editor").val();
    $("#save").click(function(){
        var input = $("#fileDialog");
        input.trigger("click");
        var dirr = input.val();
        while(dirr=""){dirr=input.val();}
        fs.writeFile(dirr,text,function(err){
            if(err) throw err;
            alert("File Saved!!");
        });
    });
    </script>

但是这样nw整个都会卡死,并占用系统大量的cpu和内存。不知道问题出在哪里。

请对nw文件模块比较熟悉的各位教教我怎么做,谢谢!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我不会写诗 2022-09-09 00:34:04

也有一些问题,比如如果保存两次,且保存位置、文件名一样,那么就不会触发change事件,也就不会保存新文档了。

表示不能理解你为什么会遇到这个问题?

编辑器保存文件时的逻辑,一般是这样的:
1、检查是不是新的文件;

如果是新的文件,就弹出选择文件要保存的路径;
如果是旧的文件,覆盖原来的文件;

第一步的结果,就是肯定会返回一个 文件路径;
2、读取编辑器当前的内容,覆盖到指定路径的那个文件;

难道你每次保存都要选择一次文件路径?

暖风昔人 2022-09-09 00:34:04

好好看看文档,我觉得你前面的做法都是不务正业,正确的是响应filedialog的save事件

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文