ace核心类是否跟踪页面上的所有编辑器实例?

时间:2016-12-26 21:41:37

标签: ace-editor

我计划在一个页面上有多个ace编辑器实例,我想知道核心库是否跟踪它们,以便我以后可以轻松获得它们的引用。

如果没有,将编辑器实例保存在字典或对象中是一种很好的方法吗?我可以在ace类上创建一个对象,它们应该是引用还是id?

var editor1 = ace.edit("myEditorDivID");
var editor2 = ace.edit("myEditorDivID2");
var editors = ace.editors;

console(editor1==editors["myEditorDivID"]); // true
console.log(editors["myEditorDivID"]); // editor1

var editorIds = ace.editorIds;

console.log(editorIds[0]); // myEditorDivID

是否有一个ace destroy方法应该用于删除对这些实例的引用?

没关系这个问题的第二部分。我刚刚找到了破坏方法:

editor.destroy();
editor.container.remove();

更新:

我只想到别的东西。如果我们可以跟踪id或引用,我们可以防止相同的id冲突。它还可以帮助跟踪页面上有多少编辑器,或者是否偶然创建了多个编辑器。

我只是查看了ace source,并且在编辑时没有看到跟踪编辑器的任何内容。我应该尝试鞭打什么或让其他人解决它?

更新2:

我正在考虑添加editors属性并按ID设置。我添加了一个建议的答案。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,不,它没有。但我建议使用以下伪代码:

ace.addEditorById = function (id, editor) {
   if (ace.editors[id]!=null) throw Error ("Editor already  created"); 
   ace.editors[id] = editor;
}

ace.getEditorById = function (id) {
   return ace.editors[id];
}

ace.removeEditorById = function (id) {
   var editor = ace.editors[id];
   if (editor) {
      editor.destroy();
      editor.container.remove();
      delete ace.editors[id];
   }
}

ace.editors = {};

// then when I create an editor I use the following code: 
editor = ace.edit("editor1");
ace.addEditorById(editor);
editor2 = ace.edit("editor2");
ace.addEditorById(editor2);

也许可以在编辑调用中添加编辑器。你怎么看?