0

我在让 CodeMirror 在新行的开头缩进代码时遇到了一些问题。

我有一个文本区域,当我点击保存时,保存到数据库的代码类似于:

<meta charset=\"utf-8\">\r\n\t\t\t<title></title>\r\n\r\n<div class=\"wra ... etc

但是当我读出来并在asp.net后面的代码中执行时, ViewCode.Text = dbModel.ViewCode......即尝试将该字符串分配给textarea,然后将其“转换”到页面上带有相关js的代码镜像编辑器中,缩进在新行的开头丢失。但是,如果我沿着一条线缩进一半,那些渲染。

此外,如果有一个新行返回,然后是一个空白行,然后是更多文本,则在读回文本区域时,空白行会丢失。

注意:textarea 是在服务器上运行的,用于从数据库中填充值。我尝试过使用 div 和文字,但无法正常工作。

那么我怎样才能保存类似的东西:

<div>
   <b>
       test
   </b>
</div>

而不是把它找回来

<div>
<b>
test
</b>
</div>

我想我必须在保存时对其进行编码,但我发誓我已经尝试了所有编码方法并且现在可以工作了!哈哈

任何指针将不胜感激。

干杯

罗宾

更新/解决方案

我回来把这个放进去,以防有人偶然发现这篇文章。

基本上,我仍然无法在相关的特定页面上很好地播放以下内容。IE

背后的代码

ViewCode.Value = dbModel.ViewCode

在哪里

dbModel.ViewCode  
//  --> is comes from db as e.g.: 
// <meta charset=\"utf-8\">\r\n\t\t\t<title></title>\r\n\r\n<div class=\"wra ... etc

JS(在页面末尾)

<script>

 var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("ViewCode"), {
        lineNumbers: true
    });

</script>

然而,我所做的是,如果你在页面上放置相同的 JS 代码,但是,不要从后面的代码中填充文本区域。然后我只是对页面方法进行简单的 ajax 调用以获取数据(在页面加载时)。

$.ajax({
            url: '/WidgetMaint.aspx/GetFileHTML',
            type: 'Get',
            contentType: 'application/json',
            data: { tempid: id },
            success: function(result) {
                myCodeMirror.setValue(result.d);
            }
        });

保存和其他一切工作完美,因为 textarea 仍然在服务器上运行,所以仍然可以在“保存”时获得它的值,因为代码镜像会处理这个问题。

我相当确定管道中还有其他东西正在填充文本并“格式化”它,然后代码镜像可以在我第一次尝试时及时获取它。但是,通过 ajax 调用,问题就消失了,因为浏览器/框架/任何东西都没有机会访问数据库返回的字符串。它直接馈送到处理它的代码镜像实例。

因此,如果您遇到类似的问题,可能更容易改变方法......

干杯

罗宾

注意:Eliran 接受了答案,因为它给了我这个想法,并支持 Marjin,因为该评论证明代码镜像可以处理缩进......

4

1 回答 1

1

我建议您放弃它textarea并在页面上保留 CodeMirror 的实时实例。这样,您可以使用 CodeMirror API 将响应直接分配给该实例。

特别看一下doc.setValue(content: string),这应该会让你走上正轨。

于 2013-08-07T10:25:25.507 回答