Как загрузить CKEditor только на ту страницу, которая ему нужна? - PullRequest
0 голосов
/ 18 декабря 2018

Я использую 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.

...