찾다

 >  Q&A  >  본문

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

新手,学习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文件模块比较熟悉的各位教教我怎么做,谢谢!!

巴扎黑巴扎黑2785일 전817

모든 응답(2)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 13:19:41

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

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

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

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

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

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

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 13:19:41

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

    회신하다
    0
  • 취소회신하다