Javascript 如何使用UndoManager确定文档是否有未保存的更改
一般来说,我对编辑器和javascript都很陌生,但除了以下几点之外,我已经实现了我的大部分目标: 我想根据文档是否有未完成的修改来启用或禁用“保存”按钮,我已尝试使用“更改”事件来执行此操作:Javascript 如何使用UndoManager确定文档是否有未保存的更改,javascript,ace-editor,Javascript,Ace Editor,一般来说,我对编辑器和javascript都很陌生,但除了以下几点之外,我已经实现了我的大部分目标: 我想根据文档是否有未完成的修改来启用或禁用“保存”按钮,我已尝试使用“更改”事件来执行此操作: UndoManager.reset(); $('#save').addClass("disabled"); editor.on('change', function() { if (UndoManager.hasUndo()) { $('#save').r
UndoManager.reset();
$('#save').addClass("disabled");
editor.on('change', function() {
if (UndoManager.hasUndo()) {
$('#save').removeClass("disabled");
}
else {
$('#save').addClass("disabled");
}
});
加载文档时,“禁用”类将立即删除
如果有人能告诉我应该怎么做,我将提前表示感谢。加载文档后,请调用
编辑器.session.getUndoManager().reset()
并在undoManager
上使用isClean
,markClean
方法
var saveButton=document.getElementById(“保存”)
var editor=ace.edit(“编辑器”)
//使用输入事件而不是更改,因为它是在超时情况下调用的
on(“输入”,函数(){
saveButton.disabled=editor.session.getUndoManager().isClean()
});
saveButton.addEventListener(“单击”,函数(){
editor.session.getUndoManager().markClean()
saveButton.disabled=editor.session.getUndoManager().isClean()
})
拯救
您的解决方案有一个缺点:保存后,无法撤消。大多数现代编辑器允许保存后撤消
我建议你把原文记录下来,并在文本发生变化时进行比较。如果文本等于原点,请禁用“保存”按钮。谢谢,效果很好(尽管我必须切换“添加”和“删除类”语句,这是我的错)。是否可以捕获用户何时返回到撤消缓冲区的开头,然后再次添加禁用的类?无论哪种方式,我都非常感谢您的帮助。我将.isClean()更改为.hasUndo()(并反转了add/remove语句),现在当用户返回到undo缓冲区的开头时,“save”按钮将禁用。它还支持重做。非常酷。@Wasim确保您正在使用最新版本的aceI,并在某些事件中将新数据加载到编辑器中。撤销管理器在延迟后运行,因此我需要将我的markClean()函数调用放入延迟内,如下所示:
setTimeout(function(){editor.getSession().getUndoManager().reset();},700)代码>(reset()或markClean()在我的情况下都适用于我)简单高效!