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)
в частности, это должно вывести вас на правильный путь.