CKEditor 4: Неперехваченная ошибка типа: не удается прочитать свойство ‘langEntries’ с нулевым значением

#javascript #ruby-on-rails #ruby #ckeditor

#javascript #ruby-on-rails #ruby #ckeditor

Вопрос:

Я использую Ruby gem для редактора CK (https://github.com/galetahub/ckeditor ) и я получаю эту ошибку:

 Uncaught TypeError: Cannot read property 'langEntries' of null
  

Вот где это происходит в коде:

 CKEDITOR.plugins.load = CKEDITOR.tools.override(CKEDITOR.plugins.load, function (a) {
var d = {};
return function (b, c, e) {
    var i = {},
        g = function (b) {
            a.call(this, b, function (a) {
                CKEDITOR.tools.extend(i, a);
                var b = [],
                    l;
                for (l in a) {
                    var s = a[l],
                        q = s amp;amp; s.requires;
                    if (!d[l]) {
                        if (s.icons)
                            for (var u = s.icons.split(","), f = u.length; f--;) CKEDITOR.skin.addIcon(u[f], s.path   "icons/"   (CKEDITOR.env.hidpi amp;amp; s.hidpi ? "hidpi/" : "")   u[f]   ".png");
                        d[l] = 1
                    }
                    if (q) {
                        q.split amp;amp; (q = q.split(","));
                        for (s = 0; s < q.length; s  ) i[q[s]] || b.push(q[s])
                    }
                }
                if (b.length) g.call(this,
                    b);
                else { *ERRORING HERE*
                    for (l in i) {
                        s = i[l];
                        if (s.onLoad amp;amp; !s.onLoad._called) {
                            s.onLoad() === false amp;amp; delete i[l];
                            s.onLoad._called = 1
                        }
                    }
                    c amp;amp; c.call(e || window, i)
                }
            }, this)
        };
    g.call(this, b)
}
});
CKEDITOR.plugins.setLang = function (a, d, b) {
var c = this.get(a),
    a = c.langEntries || (c.langEntries = {}),
    c = c.lang || (c.lang = []);
c.split amp;amp; (c = c.split(","));
CKEDITOR.tools.indexOf(c, d) == -1 amp;amp; c.push(d);
a[d] = b
};
CKEDITOR.ui = function (a) {
 if (a.ui) return a.ui;
this.items = {};
this.instances = {};
this.editor = a;
this._ = {
    handlers: {}
};
return this
};
  

Я пытаюсь использовать этот простой плагин для загрузки, и у него есть целая куча языков. Моя структура каталогов такая:
введите описание изображения здесь

Вот документация для CK Editor для этой ошибки:

http://docs.ckeditor.com /#!/api/CKEDITOR.plugins-метод-setLang

Все языковые файлы моего плагина отформатированы правильно, поэтому я пытаюсь выяснить, в чем проблема.

Мы были бы очень признательны за любую помощь в решении этой проблемы

РЕДАКТИРОВАТЬ: Вот файл английского языка —

 CKEDITOR.plugins.setLang( 'simpleuploads', 'en',
{
    // Tooltip for the "add file" toolbar button
    addFile : 'Add a file',
    // Tooltip for the "add image" toolbar button
    addImage: 'Add an image',

    // Shown after the data has been sent to the server and we're waiting for the response
    processing: 'Processing...',

    // File size is over config.simpleuploads_maxFileSize OR the server returns HTTP status 413
    fileTooBig : 'The file is too big, please use a smaller one.',

    // The extension matches one of the blacklisted ones in config.simpleuploads_invalidExtensions
    invalidExtension : 'Invalid file type, please use only valid files.',

    // The extension isn't included in config.simpleuploads_acceptedExtensions
    nonAcceptedExtension: 'The file type is not valid, please use only valid files:rn%0',

    // The file isn't an accepted type for images
    nonImageExtension: 'You must select an image',

    // The width of the image is over the allowed maximum
    imageTooWide: 'The image is too wide',

    // The height of the image is over the allowed maximum
    imageTooTall: 'The image is too tall'
});
  

Комментарии:

1. Можете ли вы отредактировать свой вопрос, чтобы включить полную трассировку стека (а не только сообщение об ошибке)? Это то, что поможет вам найти место, где действительно возникает ошибка.

2. Это код, а не трассировка стека 🙂 Это полезно… но теперь нам нужен stacktrace, чтобы сообщить нам, какая строка кода вызывает ошибку. На всякий случай вы не знаете, как выглядит ruby stacktrace (я знаю, это маловероятно): railscasts.com/episodes/24-the-stack-trace?view=asciicast

3. Пожалуйста, опубликуйте содержимое ckeditor/plugins/simpleuploads/lang/*.js .

4. @Mavis ЭТО РАБОТАЕТ! Боже мой, большое вам спасибо.

5. @Mavis добавить в качестве ответа, чтобы это можно было закрыть?

Ответ №1:

Проблема возникает из-за того, как rails компилирует ресурсы. Он генерирует один большой файл js, и если ваш plugin.js код не загружается перед файлами в /lang, он выдает ошибку и останавливает выполнение сгенерированного rails большого js-файла. Это означает, что если у вас есть какой-либо js-код после того, как произошла ошибка, он также не будет выполнен. Вот что помогло мне решить проблему:

 //= require ckeditor/init
//= require ckeditor/config
//= require ckeditor/plugins/YOUR_PLUGIN/plugin    // plugin.js in folder
//= require ckeditor/plugins/YOUR_PLUGIN/lang/en   // en.js in folder
//= require_directory .
  

Ответ №2:

Удалите следующую строку из application.js

 // = require_tree ./ckeditor
  

Комментарии:

1. Просто примечание: мне пришлось удалить, //= require_tree . потому что ckeditor каталог был под . . Я просто переместил все свои пользовательские скрипты в app и заменил вызов require_tree на //= require_tree ./app

Ответ №3:

Если вы используете ckeditor-rails в app/assets/javascripts/application.js , добавьте:

 //= require ckeditor-jquery
  

и убедитесь, что значение языка похоже на это:

 config.language = 'en';
config.language_list = [ 'en:English', 'es:Spanish' ];