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... т.е. попытаться присвоить эту строку текстовой области, которая затем будет "преобразована" в редактор зеркал кода с соответствующими 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);
            }
        });

Сохранение и все остальное работает отлично, потому что текстовая область все еще выполняется на сервере, поэтому она все еще может получить свое значение "при сохранении", поскольку зеркальное отображение кода позаботится об этом.

Я совершенно уверен, что в конвейере есть еще что-то, что наполняет текст и "форматирует" его по-другому, прежде чем зеркальное отображение кода сможет добраться до него вовремя с первой попытки, которую я делал. Однако с вызовом ajax проблема исчезает, потому что браузер /framework/ что-либо не имеет никакой возможности получить доступ к строке, которую возвращает БД. Он направляется прямо к экземпляру зеркала кода, который имеет с ним дело.

Так что в случае, если у вас возникла похожая проблема, может быть проще изменить подход....

ура

Робин

Примечание: принял ответ Элирана, поскольку он дал мне эту идею, и проголосовал за Марджина, потому что этот комментарий доказал, что кодовое зеркало может обрабатывать отступы...

1 ответ

Решение

Я бы посоветовал вам бросить это textarea и сохранить живой экземпляр CodeMirror на странице. Таким образом, вы можете назначить ответ непосредственно этому экземпляру, используя API CodeMirror.

Взгляни на doc.setValue(content: string) в частности, это должно вывести вас на правильный путь.

Другие вопросы по тегам