1

我最近开始开发一个通过 CodeMirror 操作的类——动态链接必要的库,提供与服务器的通信等等。
因此,我将所有内容都保存在变量中,并且在初始化时,CodeMirror 将附加到不在文档树中的 DOM 节点。就像这样:

 var holder = document.createElement("div");  
 var textarea = document.createElement("textarea");     
 holder.appendChild(textarea);
 this.editor = CodeMirror.fromTextArea(textarea, {/*options*/});

.show()然后,当在我的类上调用方法时,我自己附加 DIV :

 this.show(node) {
   if(this.editor!=null) {
     node.parentNode.replaceChild(holder,node);
   }
 }

编辑器没问题,因为单击它并尝试绘制,或者在我调整窗口大小之后。但在此之前,我只看到带有禁用滚动条的空白区域。我相信这是因为我初始化整个 CodeMirror 的方式。
那么,如果我想保持我的班级结构,我应该怎么做才能让它发挥作用呢? 链接到实时代码(不适用于 IE)。

4

2 回答 2

3

更直接的方法是.refresh()在显示后调用 CodeMirror 实例。请参阅http://codemirror.net/doc/manual.html#refresh

于 2013-02-12T09:48:22.380 回答
0

所以我非常简单地解决了这个问题 - 我onresize在将编辑器添加到 dom 树后调度事件:

node.parentNode.replaceChild(holder,node);
var evt = document.createEvent('UIEvents');
evt.initUIEvent('resize', true, false,window,0);
window.dispatchEvent(evt);

基于如何调度调整大小事件?问题。

于 2013-02-11T21:35:32.090 回答