当我向编辑器添加错误注释时,添加新行时它们的位置会自动更新。但是我如何才能为Markers实现同样的目标呢?
我能想到的唯一解决方案是听取更改,存储它们,并将所有增量应用于所有标记。这似乎不是非常有效..
答案 0 :(得分:2)
目前添加更改侦听器是唯一的方法。 Cloud9也是如此(见https://github.com/c9/core/blob/4ee99bd/plugins/c9.ide.language.core/marker.js#L201)
当然,如果要添加许多标记,并且使用某种树会更好,但渲染器代码本身simply iterates覆盖所有标记,这不是非常有效,它将成为将所有增量应用于所有标记之前的瓶颈变慢,因此如果需要显示大量标记,则应在ace网站上打开一个问题,要求该功能,这似乎是应该内置的功能,而不是被所有人重新实现。
答案 1 :(得分:0)
我也遇到过这个问题,最后找到一个华丽的演示来解决这个问题:Ace Editor Marker Popovers
以下是解决问题的关键代码:
var range = new Range(startRow, startColumn, endRow, endColumn);
var session = editor.getSession();
range.start = session.doc.createAnchor(range.start);
range.end = session.doc.createAnchor(range.end);
var id = session.addMarker(range, 'your_marker_class_name');