【问题标题】:Dynamic line counts in Codemirror gutter is empty every second time the key is pressedCodemirror gutter 中的动态行数在每秒钟按下一次键时为空
【发布时间】:2018-12-18 10:35:16
【问题描述】:

我的任务是建立一个笔记输入区域,我应该在其中显示每行的行数和字符数。我选择了codemirror来做这件事。一切正常,但 Line 字符数似乎每按一次按键就会消失。我已将视频链接附加到该问题,代码粘贴在下面。 谢谢你

Video of issue

var count;
var textEditor = CodeMirror(document.getElementById('noteArea'), {
  lineNumbers: true,
  autofocus: true,
  gutters: ["CodeMirror-linenumbers", "lineLength"],
  lineWrapping: true
});

textEditor.on("cursorActivity", function(cm, change) {
  var doc = cm.getDoc();
  var cursor = doc.getCursor();
  count = 50 - cursor.ch
  var line = cursor.line
  var info = cm.lineInfo(line);
  cm.setGutterMarker(line, "lineLength", info.gutterMarkers ? null : makeMarker());

  function makeMarker() {
    var marker = document.createElement("div");
    marker.style.color = countColor(count);
    marker.innerHTML = count || "●";
    return marker;
  }

  function countColor(count){
    if (count < 0 ) {
      return "#822"
    } else {
      return "green"
    }
  }

  // var line = doc.getLine(cursor.line);
})

【问题讨论】:

    标签: javascript codemirror codemirror-modes ui-codemirror


    【解决方案1】:

    错误是这一行:

    cm.setGutterMarker(line, "lineLength", info.gutterMarkers ? null : makeMarker());
    

    解决方案

    如果您希望标记始终是makeMarker() 的结果,只需删除三元:

    cm.setGutterMarker(line, "lineLength", makeMarker());
    

    说明:

    原行的作用是:

      1234563 )。
    • 如果info.gutterMarkerstruthy(例如&lt;div&gt;50&lt;/div&gt;),那么该行将调用setGutterMarker将该行的标记设置为null

      李>

    由于info.gutterMarkers 是当前行的标记(也就是说,每次调用setGutterMarker时都会修改它),该行在两种情况之间切换(首先标记是假的,所以将其设置为&lt;div&gt;50&lt;/div&gt;,然后标记为真,因此将其设置为null,然后标记为假,因此将其设置为&lt;div&gt;48&lt;/div&gt;...)。这就是导致您观察到的交替行为的原因 - 间隔标记设置为 null 每按一次。

    【讨论】:

    猜你喜欢
    • 2018-02-18
    • 2018-11-05
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2013-09-23
    相关资源
    最近更新 更多