【问题标题】:codemirror 3.0 format preloaded textarea codecodemirror 3.0 格式预加载文本区号
【发布时间】:2013-05-29 03:00:17
【问题描述】:

我正在使用 CodeMirror 在基于 HTML5 的演示文稿中创建编辑器。在最简单的形式中,html 看起来像这样。

 <section class="pattern">
      <textarea id='pattern-view' class='codemirror' data-mode='javascript'>
           var myModule = function(){
              //code goes here
           }
      </textarea>
 </section>

然后在文档中准备好我有代码

 $(function(){
     var tAreas = document.querySelectorAll('.codemirror');
        for (var i = 0; i < tAreas.length; i++) {
           CodeMirror.fromTextArea(tAreas[i], { theme: 'monokai',  mode: tAreas[i].dataset.mode });
        }
 });

这按预期工作,文本区域被编辑器替换。问题是缩进保持不变并且格式不正确。它只高亮代码,不重新格式化内容。

我有什么需要补充的吗?我确实找到了formatting.js 插件的代码,它不再是codemirror 3.0 的一部分。

有没有办法自动格式化文本区域内的代码?

【问题讨论】:

    标签: codemirror


    【解决方案1】:

    回答我自己的问题。对于那些可能会碰巧的人。从旧代码镜像中获取formatting.js 并将其放在您喜欢的位置。将此添加到您的 dom 就绪函数中

     var tAreas = document.querySelectorAll('.codemirror'); //assuming all textareas have the class codemirror
    
            for (var i = 0; i < tAreas.length; i++) {
                var editor = CodeMirror.fromTextArea(tAreas[i], {theme: 'monokai',mode: tAreas[i].dataset.mode, tabMode: 'indent' });
                CodeMirror.commands["selectAll"](editor);
                autoFormatSelection(editor);
                $(tAreas[i]).trigger({type: 'keypress', which: 13});
            }
    
            function getSelectedRange(editor) {
                return { from: editor.getCursor(true), to: editor.getCursor(false) };
            }
    
            function autoFormatSelection(editor) {
                var range = getSelectedRange(editor);
                editor.autoFormatRange(range.from, range.to);
                CodeMirror.commands['goPageUp'](editor);
    
            }
    

    【讨论】:

    • 不幸的是,当我尝试这种方法时,它实际上会以 25% 的恒定 cpu(每个选项卡进程的上限)硬锁定我的页面。
    • 如果您的文本区域过多,就会出现问题并且您的屏幕会锁定。我没有提出其他解决方案,或者至少我没有尝试过任何新的解决方案。即使你把它作为一个长时间运行的过程并返回一个承诺(或在设定的超时时间内执行),你仍然会遇到它需要很长时间的问题。
    • 不幸的是,我只有一个文本区域。不太清楚它为什么会被锁定,但它非常终端,而且速度非常快。
    • 您的 textarea 是否有太多代码需要格式化?把console.beginTime 和console.endTime 看看哪个部分的代码用的时间比较长。
    • 你好,我也有同样的问题。你能帮帮我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    相关资源
    最近更新 更多