Сбросить состояние редактора Monaco

Я реализовал редактор Monaco Editor (https://github.com/Microsoft/monaco-editor ) как способ для пользователя вставить JSON.

Я включаю редактор, как только пользователь нажимает кнопку «опубликовать». Проблема в том, что редактор включен внутри функции переключателя. Таким образом, после того, как кнопка была нажата один раз, редактор захочет добавить ее под первым созданным редактором, если клиент снова нажмет ту же кнопку. Есть ли способ «сбросить» редактор, чтобы он фактически не добавлялся, а просто вместо этого либо создал новый, либо использовал уже созданный?

Вот мой текущий код.

require.config({ paths: { 'vs': '/scripts/monaco-editor/min/vs' } });

switch (id) {
        case 'post':
            $('#httpMethodGet').css('display', 'none');
            $('#httpMethodPost').show();
            require(['vs/editor/editor.main'], function () {
                monaco.languages.json.jsonDefaults.setDiagnosticsOptions({
                    schemas: [{
                        uri: "http://myserver/bar-schema.json",
                        schema: {
                            type: "object",
                            properties: {
                                q1: {
                                    enum: ["x1", "x2"]
                                }
                            }
                        }
                    }]
                });
                var jsonObject = [
                    '{',
                    '    "$schema": "http://myserver/foo-schema.json"',
                    "}"
                ].join('\n');
                window.editor = monaco.editor.create(document.getElementById('codeEditor'), {
                    value: jsonObject,
                    language: 'json',
                    theme: 'vs-dark',
                    scrollBeyondLastLine: false,
                    renderWhitespace: true
                });
            });
            break;

Поэтому я хочу, чтобы window.editor = monaco.editor.create(document.getElementById('codeEditor'), {}) либо использовал тот же уже созданный, если он был создан, либо создавал новый каждый раз, когда вводятся эти варианты переключения, чтобы он не добавлял ниже уже созданных.


person Daniel    schedule 01.09.2016    source источник


Ответы (1)


Вы должны создать редактор кода Monaco вне функции переключения. Внутри вашей функции вы должны изменить только свою модель.

Итак, перед функцией switch()

window.editor = monaco.editor.create(document.getElementById('codeEditor'), {
                    value: '',
                    language: 'json',
                    theme: 'vs-dark',
                    scrollBeyondLastLine: false,
                    renderWhitespace: true
                });

затем внутри switch()

window.editor.getModel(). setValue(jsonObject);

API-интерфейсы доступны здесь.

person SomeBruh    schedule 07.09.2016
comment
Я нашел решение и решил, что к тому времени все равно не смогу использовать monaco.editor, поэтому перешел на CodeMirror. Тем не менее, спасибо за ваш ответ - насколько я помню, это похоже на очень правильное решение :-) - person Daniel; 07.09.2016