2013-08-06 114 views
0

我有一些問題讓CodeMirror縮進新行開頭的代碼。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是runat服務器來填充數據庫中的值。我曾嘗試使用div和文字,但無法使其工作。

所以,我怎麼能保存的東西,如:

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

,而不是拿回來像

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

我相信我一定要對其進行編碼,在保存,但我發誓,我已經嘗試了所有的編碼方法現在工作!大聲笑

任何指針,將不勝感激。

乾杯

羅賓

更新/解決方案

我已經回來把這個,萬一碰到這個職位有一個人絆倒。

基本上我仍然無法得到以下在有問題的特定頁面上很好地播放。即

背後

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調用,問題消失了,因爲瀏覽器/框架/任何沒有機會訪問DB返回的字符串。它直接饋送到處理它的代碼鏡像的實例。

所以,如果你有一個類似的問題,可能會更容易改變的做法....

乾杯

羅賓

注:接受的答案被Eliran,因爲它給了我這個想法,並upvoted Marjin,因爲該評論證明它的代碼鏡像可以處理縮進...

+2

CodeMirror處理標籤的罰款。例如,在http://codemirror.net/mode/xml/上運行以下代碼就可以實現你所期望的:'editor.setValue(' \ r \ n \所以你應該看看代碼通過的管道的其他部分。 – Marijn

+0

Thx。是的,我認爲它是可以的可以,但我應該用什麼來將它從後面的代碼傳遞到aspx頁面?我的觀點是將該字符串分配給後面代碼中的textarea.value,並且附加代碼鏡像到文本區域不起作用。 ? –

+0

如何從數據庫中獲取文本? –

回答

1

我建議你放棄textarea,並保留頁面上的CodeMirror實例。這樣,您可以使用CodeMirror API將響應直接分配給該實例。

請特別注意doc.setValue(content: string),這會讓您走上正軌。