Я использую CKEditor gem.Он используется только на страницах администратора.Я хочу использовать его только на тех страницах, где это требуется.Я закомментировал директиву Sprocket в application.js
// only load on required pages // require ckeditor/init
и добавил ее на страницу формы вверху
<%= javascript_include_tag 'ckeditor/init' %>
Однако она работает только иногда.Если я перезагружаю страницу без и перехожу на страницу с , она загружает скрипт, но не может оформить текстовое поле.Там нет ошибок консоли.
Если я перезагрузить страницу с , то это успешно и украшает текстовое поле.
Если я перезагрузить страницу без это, перейдите на страницу с помощью это, перейдите на страницу без это, затем вернитесь обратно на страницу с помощью это, затем это успешно иукрашает текстовое поле, но выдает консольное предупреждение
[CKEDITOR] Код ошибки: editor-destroy-iframe.
[CKEDITOR] Для получения дополнительной информации об этой ошибке перейдите к http://docs.ckeditor.com/#!/guide/dev_errors-section-editor-destroy-iframe
Эта ссылка гласит:
Описание: Редактор не может быть корректно уничтожен, поскольку он был выгружен до уничтожения редактора.Обязательно уничтожьте редактор, прежде чем отсоединять его от DOM.
Я почти уверен, что это проблема Turbolinks.Я бы добавил обработчик событий $(document).on 'turbolinks:load'
, но я не знаю, какой идентификатор DOM использовать или как «инициализировать» или «уничтожить» CKEditor.
Rails 5.2.2
Я попробовал это, исправив имя класса и события https://github.com/galetahub/ckeditor#turbolink-integration
ready = ->
$('.ckeditor_class').each ->
CKEDITOR.replace $(this).attr('id')
console.log("ck'd "+$(this).attr('id'))
$(document).ready(ready)
$(document).on('turbolinks:load', ready)
Но это выдало консольную ошибку
Uncaught ReferenceError: CKEDITOR не определено
Я пробовал это
$(document).on 'turbolinks:load', ->
setTimeout ->
if CKEDITOR?
$('.ckeditor_class').each ->
CKEDITOR.replace $(this).attr('id')
, 1000
И это работает при переходе со страницы, у которой нет , на страницу, которая делает есть, но при перезагрузке страницы, которая есть у * , выдает ошибку консоли
Uncaught Экземпляр редактора question_prompt уже присоединен к предоставленному элементу.
Нет способа узнать, была ли она инициализирована или нет.Например: CKEDITOR.instances
не имеет свойства length
.