搜尋

首頁  >  問答  >  主體

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

巴扎黑巴扎黑2786 天前823

全部回覆(2)我來回復

  • PHP中文网

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

    也有一些問題,例如如果儲存兩次,且儲存位置、檔案名稱一樣,那麼就不會觸發change事件,也就不會儲存新文件了。

    表示不能理解你為什麼會遇到這個問題?

    編輯器儲存檔案時的邏輯,一般是這樣的:
    1、檢查是不是新的檔案;

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

    第一步的結果,就是肯定會回傳一個 檔案路徑;
    2、讀取編輯器目前的內容,覆蓋到指定路徑的那個檔案;

    你每次儲存都要選擇一次檔案路徑?

    回覆
    0
  • 黄舟

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

    好好看看文檔,我覺得你前面的做法都是不務正業,正確的是回應filedialog的save事件

    回覆
    0
  • 取消回覆