Ace 编辑器通过自动完成检测更改是否发生
Ace editor Detect if Change happen via Autocomplete
editor.getSession().on("change",function(editing){
if (ide.curOp && ide.curOp.command.name){
console.log("change when pressing keys");
}
else {
console.log("Changed when Click on autocomplete list or programically.");
// This change is programmatically but if its via click on autocomplete list or not?
// If its via click on autocomplete I want to save document else want to ignore.
}
});
我在代码中的评论很好地解释了我的问题。
答案很大程度上取决于您所说的 "programical",编辑器所做的任何事情都是通过 api 调用完成的,所以一切都是 "programical"。例如。如果有人添加 <button onclick='editor.setValue("")'>
将由它引起的变化是 "programical" 或不是。
如果您想将您的代码发出的 api 调用与其他代码区分开来,请使用一个布尔变量并在调用 ace api 之前将其设置为 true,之后将其设置为 false。
var ignoreChanges = false
editor.session.on("change", function(delta){
if (ignoreChanges) return console.log("ignore changes made by me")
console.log("handle changes made in some other way")
})
function applyChange() {
try {
ignoreChanges = true
// call some editor api here
editor.insert("...")
} finally {
ignoreChanges = false
}
}
editor.getSession().on("change",function(editing){
if (ide.curOp && ide.curOp.command.name){
console.log("change when pressing keys");
}
else {
console.log("Changed when Click on autocomplete list or programically.");
// This change is programmatically but if its via click on autocomplete list or not?
// If its via click on autocomplete I want to save document else want to ignore.
}
});
我在代码中的评论很好地解释了我的问题。
答案很大程度上取决于您所说的 "programical",编辑器所做的任何事情都是通过 api 调用完成的,所以一切都是 "programical"。例如。如果有人添加 <button onclick='editor.setValue("")'>
将由它引起的变化是 "programical" 或不是。
如果您想将您的代码发出的 api 调用与其他代码区分开来,请使用一个布尔变量并在调用 ace api 之前将其设置为 true,之后将其设置为 false。
var ignoreChanges = false
editor.session.on("change", function(delta){
if (ignoreChanges) return console.log("ignore changes made by me")
console.log("handle changes made in some other way")
})
function applyChange() {
try {
ignoreChanges = true
// call some editor api here
editor.insert("...")
} finally {
ignoreChanges = false
}
}