CodeMirror 有内容,但在按键之前不会显示


CodeMirror has content but won't display until keypress

我有一个 CodeMirror 实例嵌入到我正在构建的 Web 应用程序中。它工作得很好 - 除了在用户输入新字符之前不会显示初始内容。因此,在用户强制更改之前,它都在那里隐藏。这很糟糕。有什么方法可以强制重新绘制或刷新模拟字符输入的浏览器 - 空格就可以了。

这是代码...

<textarea id='code-mirror' ><?php echo $contents; ?></textarea>
<script>
    jQuery(document).ready(function(){
        var textarea = document.getElementById('code-mirror');
        var myCodeMirror = CodeMirror.fromTextArea(textarea,    
            {  
            onUpdate:codemirrorcallback,
            });
        // myCodeMirror.refresh(); ? is this an option?
     });
</script>

这将生成一个工作编辑器,该编辑器保存内容并在文本区域内显示保存的内容,但仅在用户开始编辑后显示它。在此之前,它只是空白的。

任何帮助,甚至只是链接,将不胜感激。谢谢大家!

更新

在 myCodeMirror 上调用 .refresh 会在 Chrome 控制台中打印错误Uncaught TypeError: Cannot call method 'focus' of undefined

如果发生这种情况,您确实需要在 CodeMirror 实例上调用 refresh()。但是由于太空猴子,您需要在超时中包装刷新调用:

var editor = CodeMirror.fromTextArea( yourSourceDOM, { lineNumbers:true })
setTimeout( editor.refresh, 0 )

它并不漂亮,但这为我解决了它。

使用代码镜像 5.14.2,如果您显式刷新,则必须注意正确调用它(请参阅此问题),但使用代码镜像提供的自动刷新插件最容易处理它。

如果您使用的是 CodeMirror 版本 2+,则可以调用 CodeMirror.refresh() 。请参阅有关 refresh() 的文档。

注意: 这必须在 CodeMirror 实例上调用,而不是在元素上调用。见 https://stackoverflow.com/a/5377029/526741