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

Autocomplete Ace编辑器通过自动完成检测是否发生更改,autocomplete,onchange,detect,ace-editor,Autocomplete,Onchange,Detect,Ace Editor,我的代码注释很好地解释了我的问题 答案很大程度上取决于您所称的“编程”,编辑器所做的任何事情都是通过api调用完成的,因此一切都是“编程的”。例如,如果有人添加了一个,那么由它引起的更改是否是“程序性的” 如果您想将代码进行的api调用与其他api调用区分开来,请使用布尔变量,并在调用ace api之前将其设置为true,然后将其设置为false editor.getSession().on("change",function(editing){ if (ide.curOp &&

我的代码注释很好地解释了我的问题

答案很大程度上取决于您所称的“编程”,编辑器所做的任何事情都是通过api调用完成的,因此一切都是“编程的”。例如,如果有人添加了一个
,那么由它引起的更改是否是“程序性的”

如果您想将代码进行的api调用与其他api调用区分开来,请使用布尔变量,并在调用ace api之前将其设置为true,然后将其设置为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.
    }
});

答案很大程度上取决于您所称的“编程”,编辑器所做的任何事情都是通过api调用完成的,因此一切都是“编程的”。例如,如果有人添加了一个
,那么由它引起的更改是否是“程序性的”

如果您想将代码进行的api调用与其他api调用区分开来,请使用布尔变量,并在调用ace api之前将其设置为true,然后将其设置为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.
    }
});

我只是在上面的代码中更改了注释,编程方式意味着通过api进行更改。我的问题是,如果用户所做的更改没有保存,我想保存文档。现在,当我从“自动完成”列表中单击时,它将转到“其他情况”,而我需要在“用户做出的更改”情况下使用它。希望我解释得很好是的很对,聪明人。我们有解决办法吗。现在您也可以理解我的另一个问题,即禁用undomanager,以避免与不同合作者的undomanager发生冲突。最后两个问题将完成我的编辑的第一阶段,如果您能帮助我,我将非常感谢。不幸的是,这是相当复杂的实施。看看现有的解决方案,如sharejs、firebase或c9.ide.collab。最后一个使用ignoreChanges标志来忽略自身所做的更改,并使用undomanger的修改版本来重新设置撤消堆栈的基础,您也可以使用更改转换算法来实现这一点ignoreChanges标志的想法很有效,这很简单,但非常好。谢谢我现在就要完成我的实时编辑器了。若你们能继续讨论另一个问题,我将非常感激。我只是在上面的代码中更改了注释,编程方式意味着通过api进行更改。我的问题是,如果用户所做的更改没有保存,我想保存文档。现在,当我从“自动完成”列表中单击时,它将转到“其他情况”,而我需要在“用户做出的更改”情况下使用它。希望我解释得很好是的很对,聪明人。我们有解决办法吗。现在您也可以理解我的另一个问题,即禁用undomanager,以避免与不同合作者的undomanager发生冲突。最后两个问题将完成我的编辑的第一阶段,如果您能帮助我,我将非常感谢。不幸的是,这是相当复杂的实施。看看现有的解决方案,如sharejs、firebase或c9.ide.collab。最后一个使用ignoreChanges标志来忽略自身所做的更改,并使用undomanger的修改版本来重新设置撤消堆栈的基础,您也可以使用更改转换算法来实现这一点ignoreChanges标志的想法很有效,这很简单,但非常好。谢谢我现在就要完成我的实时编辑器了。若你们能继续讨论另一个问题,我将非常感激。