RequireJS правильно загружает CodeMirror, но UIKit говорит, что он не определен

Я использую RequireJS в своем проекте для загрузки моих JS-зависимостей.

Это мой файл конфигурации:

require.config({
    'baseUrl' : '/js',
    'paths' : {
        'angular' : 'dependencies/angular',
        'cm' : 'dependencies/codemirror',
        'marked' : 'dependencies/marked',
        'jquery' : 'dependencies/jquery',
        'sails' : 'dependencies/sails.io',
        'uikit' : 'dependencies/uikit/js/uikit'
    },
    'config' : {
        'uikit' : {
            'base' : 'dependencies/uikit/js'
        }
    },
    'shim' : {
        'angular' : {
            exports : 'angular'
        },
        'cm/lib/codemirror' : {
            exports : 'codemirror'
        },
        'jquery' : {
            exports : 'jquery'
        },
        'sails.io' : {
            deps : ['socket.io'],
            exports : 'io'
        },
        'uikit' : {
            deps : ['jquery', 'cm/lib/codemirror']
        }
    }
});

define([
    'angular',
    'uikit!htmleditor',
    'cm/lib/codemirror',
    'cm/addon/mode/overlay',
    'cm/mode/markdown/markdown',
    'cm/mode/xml/xml',
    'cm/mode/gfm/gfm',
    'marked'
], function(angular, uikit, CodeMirror) {

    var htmleditor = uikit.htmleditor(document.getElementById("formNewArticleTextarea"), {
        markdown : true,
        mode : 'tab'
    })
});

Проблема в том, что каждый раз, когда я перезагружаю страницу, аддон UIKit HTMLEditor возвращает мне эту ошибку:

Uncaught ReferenceError: CodeMirror is not defined 

1 ответ

У меня была такая же проблема с CodeMirror и Mergely.

Попробуйте сознательно поместить CodeMirror в глобальную (оконную) область в верхней части функции init. Смотрите "Добавить эту строку" ниже:

define([
    'angular',
    'uikit!htmleditor',
    'cm/lib/codemirror',
    'cm/addon/mode/overlay',
    'cm/mode/markdown/markdown',
    'cm/mode/xml/xml',
    'cm/mode/gfm/gfm',
    'marked'
], function(angular, uikit, CodeMirror) {
    window.CodeMirror = CodeMirror; // <-- Add this line
    var htmleditor = uikit.htmleditor(document.getElementById("formNewArticleTextarea"), {
        markdown : true,
        mode : 'tab'
    })
});
Другие вопросы по тегам