新手,学习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文件模块比较熟悉的各位教教我怎么做,谢谢!!
PHP中文网2017-04-17 13:19:41
也有一些问题,比如如果保存两次,且保存位置、文件名一样,那么就不会触发change事件,也就不会保存新文档了。
表示不能理解你为什么会遇到这个问题?
编辑器保存文件时的逻辑,一般是这样的:
1、检查是不是新的文件;
如果是新的文件,就弹出选择文件要保存的路径;
如果是旧的文件,覆盖原来的文件;
第一步的结果,就是肯定会返回一个 文件路径;
2、读取编辑器当前的内容,覆盖到指定路径的那个文件;
难道你每次保存都要选择一次文件路径?