Ace编辑器检测是否通过自动完成发生更改

时间:2016-01-23 17:35:53

标签: autocomplete onchange detect ace-editor

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.
    }
});

我在代码中的评论很好地解释了我的问题。

1 个答案:

答案 0 :(得分:2)

答案在很大程度上取决于你所谓的“程序化”,编辑所做的任何事情都是通过api调用完成的,所以一切都是“程序化的”。例如。如果有人添加<button onclick='editor.setValue("")'>,则会因为“程序化”而导致更改。

如果要区分代码对其他人的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
    }
}