代码之家  ›  专栏  ›  技术社区  ›  Chloe

如何只在需要的页面上加载CKEditor?

  •  0
  • Chloe  · 技术社区  · 5 年前

    CKEditor 宝石。它只用于管理页面。我只想在需要它的页面上使用它。我在中注释掉了链轮指令 application.js

    // only load on required pages // require ckeditor/init
    

    我把它添加到表单页面的顶部

    <%= javascript_include_tag 'ckeditor/init' %>
    

    然而,它只是有时起作用。如果我重新加载页面 然后加载脚本,但无法装饰文本框。没有控制台错误。

    如果我重新加载页面 具有

    如果我重新加载页面 它,导航到一个页面 具有 它,导航到一个页面 具有


    [CKEDITOR]有关此错误的详细信息,请转到 http://docs.ckeditor.com/#!/guide/dev_errors-section-editor-destroy-iframe

    这个链接说

    描述:无法正确销毁编辑器,因为它在销毁编辑器之前已卸载。确保在将编辑器从DOM分离之前销毁它。

    我敢肯定这是涡轮链接的问题。我会加一个 $(document).on 'turbolinks:load' 事件处理程序,但我不知道要使用什么DOM id,也不知道如何“初始化”或“销毁”CKEditor。


    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)
    

    但它给出了一个控制台错误

    未捕获引用错误:未定义CKEDITOR


    我试过了

    $(document).on 'turbolinks:load', ->
      setTimeout ->
        if CKEDITOR?
          $('.ckeditor_class').each ->
            CKEDITOR.replace $(this).attr('id')
      , 1000
    

    当你从一个 把它写在 有,但是当重新加载页面时 有了,它给出了控制台错误

    Uncaught编辑器实例“question_prompt”已附加到所提供的元素。

    无法知道它是否已初始化。前任: CKEDITOR.instances 没有一个 length

    0 回复  |  直到 5 年前
        1
  •  0
  •   GEkk    4 年前

    也许是这样吧

    check_ckeditor_loaded = function($el) {
      if (typeof CKEDITOR !== "undefined" && CKEDITOR !== null) {
        if ($.isEmptyObject(CKEDITOR.instances)) {
          CKEDITOR.replace($el.attr('id'));
        }
        # make other magic 
      } else {
        setTimeout((function() {
          return check_ckeditor_loaded($el);
        }), 100);
      }
    };
    
    
    $(document).on 'turbolinks:load', ->
      $('.ckeditor_class').each ->
        $el = $(this)
        check_ckeditor_loaded($el);