Как настроить monaco-редактор и изменить значение?
Я хочу использовать monaco-редактор для просмотра разных файлов каталога. Я хочу создать редактор и динамически изменять содержимое. Но это не работает так, как я хочу.
function doSomething(val) {
require.config({ paths: { 'vs': 'min/vs' }});
require(['vs/editor/editor.main'], function() {
monEditor = monaco.editor.create(document.getElementById("content"), {
value: val,
language: "plain",
scrollBeyondLastLine: false,
readOnly: true
});
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<link type="text/css" href="min/vs/editor/editor.main.css" rel="stylesheet">
<body>
<!--- Modal start -->
<div id="content" style="height:100px; width: 100px;"> </div> <!-- Modal content -->
<!-- Modal end -->
<button onclick="doSomething('Input1')"> Change1 </button>
<button onclick="doSomething('Input2')"> Change2 </button>
<script src="min/vs/loader.js"></script>
</body>
</html>
Это мой код В первый раз, когда я открываю модал, все работает нормально, но монако-редактор исчезает.
Когда я пытаюсь использовать monEditor.setValue(val)
появляется ошибка, что monEditor не определен.
И когда я пытаюсь использовать monEditor.setModel(model)
появляется ошибка, что узел не найден.
Кто-нибудь знает, что я делаю неправильно или что мне нужно изменить, чтобы это работало? Я много пробовал, но не правильно настроил редактор. К сожалению, примеры также не помогают мне, потому что они включают данные, которых нет в хранилище.
1 ответ
JavaScript использует области, которые представляют собой небольшие контексты выполнения. Переменные, объявленные в области видимости, могут быть доступны ("видимы") для под-областей текущей области, но не для любых внешних. (См. Определение в Mozilla Developer Network и это всеобъемлющее руководство по областям применения JavaScript.)
Вы определяете свой monEditor
переменная внутри области действия функции, поэтому вы не сможете получить к ней доступ в любое время позже. Вы можете переопределить свою функцию следующим образом:
let monEditor;
function doSomething (val) {
require.config ({ paths: { 'vs': 'min/vs' }});
require (['vs/editor/editor.main'], function () {
monEditor = monaco.editor.create (document.getElementById ("content"), {
value: val,
language: "plain",
scrollBeyondLastLine: false,
readOnly: true
});
});
}
Вот monEditor
определяется в глобальной области видимости, что делает его доступным для всех функций. Попытка переопределить это приведет к ошибке, потому что monEditor
объявлен с let
,