#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' ];