Я хотел бы иметь возможность преобразовывать определенные текстовые поля на странице в редакторы ACE.
У кого-нибудь есть указатели, пожалуйста?
РЕДАКТИРОВАТЬ:
У меня есть файл editor.html, работающий с одним текстовым полем, но как только я добавляю второе, второе не преобразуется в редактор.
РЕДАКТИРОВАТЬ 2:
Я решил отказаться от идеи иметь несколько и вместо этого открыть одну в новом окне. Моя новая затруднительная ситуация заключается в том, что когда я скрываю () и показываю () текстовое поле, отображение искажается. Любые идеи?
javascript
textarea
ace-editor
Павел
источник
источник
Ответы:
Насколько я понял идею Ace, не стоит делать текстовое поле редактором Ace. Вам следует создать дополнительный div и обновить текстовое поле, используя вместо этого функцию .getSession () .
html
<textarea name="description"/> <div id="description"/>
js
var editor = ace.edit("description"); var textarea = $('textarea[name="description"]').hide(); editor.getSession().setValue(textarea.val()); editor.getSession().on('change', function(){ textarea.val(editor.getSession().getValue()); });
или просто позвони
только когда вы отправляете форму с заданным текстовым полем. Я не уверен, что это правильный способ использования Ace, но именно так он используется на GitHub .
источник
'SELECT 1OR&nbps;2;'
в textarea. Может кто-нибудь сказать мне, что я делаю не так?У Дункансмарта есть довольно крутое решение на своей странице github, прогрессив-ace, которое демонстрирует один простой способ подключить редактор ACE к вашей странице.
Обычно мы получаем все
<textarea>
элементы сdata-editor
атрибутом и конвертируем каждый в редактор ACE. В примере также устанавливаются некоторые свойства, которые вы должны настроить по своему вкусу, и демонстрируется, как вы можете использоватьdata
атрибуты для установки свойств для каждого элемента, таких как отображение и скрытие желобаdata-gutter
.// Hook up ACE editor to all textareas with data-editor attribute $(function() { $('textarea[data-editor]').each(function() { var textarea = $(this); var mode = textarea.data('editor'); var editDiv = $('<div>', { position: 'absolute', width: textarea.width(), height: textarea.height(), 'class': textarea.attr('class') }).insertBefore(textarea); textarea.css('display', 'none'); var editor = ace.edit(editDiv[0]); editor.renderer.setShowGutter(textarea.data('gutter')); editor.getSession().setValue(textarea.val()); editor.getSession().setMode("ace/mode/" + mode); editor.setTheme("ace/theme/idle_fingers"); // copy back to textarea on form submit... textarea.closest('form').submit(function() { textarea.val(editor.getSession().getValue()); }) }); });
textarea { width: 100%; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"></script> <textarea name="my-xml-editor" data-editor="xml" data-gutter="1" rows="15"></textarea> <br> <textarea name="my-markdown-editor" data-editor="markdown" data-gutter="0" rows="15"></textarea>
источник
У вас может быть несколько редакторов Ace. Просто дайте каждому текстовому полю идентификатор и создайте Ace Editor для обеих IDS, например:
<style> #editor, #editor2 { position: absolute; width: 600px; height: 400px; } </style> <div style="position:relative; height: 450px; " > <div id="editor">some text</div> </div> <div style="position:relative; height: 450px; " > <div id="editor2">some text</div> </div> <script src="ace.js" type="text/javascript" charset="utf-8"></script> <script src="theme-twilight.js" type="text/javascript" charset="utf-8"></script> <script src="mode-xml.js" type="text/javascript" charset="utf-8"></script> <script> window.onload = function() { var editor = ace.edit("editor"); editor.setTheme("ace/theme/twilight"); var XmlMode = require("ace/mode/xml").Mode; editor.getSession().setMode(new XmlMode()); var editor2 = ace.edit("editor2"); editor2.setTheme("ace/theme/twilight"); editor2.getSession().setMode(new XmlMode()); }; </script>
источник
Чтобы создать редактор, просто выполните:
HTML:
<textarea id="code1"></textarea> <textarea id="code2"></textarea>
JS:
var editor1 = ace.edit('code1'); var editor2 = ace.edit('code2'); editor1.getSession().setValue("this text will be in the first editor"); editor2.getSession().setValue("and this in the second");
CSS:
#code1, code2 { position: absolute; width: 400px; height: 50px; }
Они должны быть четко позиционированы и заданы по размеру. Под show () и hide () я полагаю, вы имеете в виду функции jQuery. Я не совсем уверен, как они это делают, но он не может изменить пространство, которое занимает в DOM. Я скрываю и показываю, используя:
$('#code1').css('visibility', 'visible'); $('#code2').css('visibility', 'hidden');
Если вы используете свойство css display, оно не будет работать.
Ознакомьтесь с вики здесь, чтобы узнать, как добавлять темы, режимы и т. Д. Https://github.com/ajaxorg/ace/wiki/Embedding---API
Примечание: они не обязательно должны быть текстовыми полями, они могут быть любым элементом, который вы хотите.
источник
ace.edit('code1')
вы получаете мусор, например:<textarea class="ace_editor ace-twilight ace_focus"><div class="ace_gutter">...</textarea>
Другими словами, ace.edit пытается запихнуть себя в текстовое поле, и это не очень хорошо.Для всех вроде меня, которым просто нужен минимальный рабочий пример использования Ace из CDN:
<!DOCTYPE html> <html lang="en"> <body style="margin:0"> <div id="editor">function () { console.log('this is a demo, try typing!') } </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.01/ace.js" type="text/javascript" charset="utf-8"></script> <script> var editor = ace.edit("editor"); editor.setTheme("ace/theme/monokai"); editor.getSession().setMode("ace/mode/javascript"); document.getElementById("editor").style.height = "120px"; </script> </body> </html>
источник