Ace编辑:无法摆脱Marker

时间:2015-10-24 23:14:08

标签: javascript ace-editor

我正在编写一个模拟简单8位CPU的简单小部件。为此,我正在滥用Ace编辑器,正如你在图像的中心看到的那样,作为我的“ RAM ” - 视图。

enter image description here

我想突出显示与程序计数器值对应的行,我使用addMarker()来执行此操作。

然而,一旦我设置它,我似乎无法摆脱那个标记。 _marker是一个私有成员,它保存最后一个标记集的值。但由于某些原因removeMarker(_marker)没有效果:

/**
 *
 */
setMarker: function(position) {

    //if(_marker != null) {
        window.cpuRamView.session.removeMarker(_marker);
    //}

    _marker = new window.Range(position, 0, position, _content[position].length);

    window.cpuRamView.session.addMarker(
        _marker, "programCounterLocation", "fullLine"
    );
}

我在这里做错了什么? :/

2 个答案:

答案 0 :(得分:3)

添加标记会返回一个ID,而removeMarker需要该ID,因此您可以执行类似

的操作
var Range = require("ace/range").Range // not the window Range!!
var _range

setMarker = function(position) {

    if(_range != null) {
        window.cpuRamView.session.removeMarker(_range.id);
    }

    _range = new Range(position, 0, position, _content[position].length);

    _range.id = window.cpuRamView.session.addMarker(
        _range, "programCounterLocation", "fullLine"
    );
}

答案 1 :(得分:0)

if(this.marker) {
        this.editor.getSession().removeMarker(this.marker);
      }
      this.marker = this.editor.getSession().addMarker(
        new Range(prop('errorLine')(formulaError), prop('errorPosition')(formulaError), prop('errorLine')(formulaError), prop('errorPosition')(formulaError) + 5), style.errorMarker, 'text');
    }