如何在CKEditor 4

时间:2018-03-20 00:00:46

标签: drupal ckeditor

我的问题是我有一个插件,当页面中只有1个CKEditor时它可以正常工作。您可以根据需要多次打开和关闭自定义插件对话框,并进行所有更改。

但是,只要在页面上的任何其他CKEditor上打开插件,前一个CKEditor实例的值仍然存在,并且会发生很多怪癖。

我尝试使用dialog.destroy()函数来“修复”这个问题 - 这意味着你现在可以在所有不同的CKEditor实例上使用它了。但是它打破了当前的实例,这意味着如果你试图打开任何已经再次使用的实例,它就不起作用(因为对话框已被破坏)。我尝试使用reset()和replace()无济于事。

也许它与字段本身有关...这是对话框/ my_plugin.js文件中的一个示例:

 contents: [
            {
                id: 'tab-basic',
                label: 'Basic Settings',
                elements: [
                    {
                        type: 'html',
                        id: 'icon_with_options',
                        html: '<div id="selected-icon"></div>',
                    },
                    {
                        type: 'html',
                        id: 'osu_icon_color',
                        html: '<div class="osu-colors"><label>Click on a color <input id="osu-icon-color" type="text" value="osu" readonly/></label>' +
                        '<p class="osu color-active"></p>' +
                        '<p class="sand"></p>' +
                        '<p class="stratosphere"></p>' +
                        '<p class="moondust"></p>' +
                        '<p class="dark"></p>' +
                        '<p class="pine-stand"></p>' +
                        '<p class="luminance"></p>' +
                        '<p class="reindeer-moss"></p>' +
                        '</div>',
                        onLoad: function () {
                            (function ($) {
                                var colors = $('.osu-colors p');
                                colors.click(function (e) {
                                    colors.removeClass('color-active');
                                    var className = e.currentTarget.className;
                                    document.getElementById('osu-icon-color').value = className;
                                    icon_preview();
                                    $(this).addClass('color-active');
                                });
                            })(jQuery);
                        },

                    },

我想知道问题是大多数HTML都是装饰。 我使用常规类型对插件进行了示例:text和type:select,这些工作正常。但不知何故,类型:'html'不会以同样的方式清除并导致问题。不幸的是,所有在线示例都是简单的文本元素或其他预构建元素。

感谢任何帮助。这是Drupal 7模块中的插件,但无论如何都应该适用。

1 个答案:

答案 0 :(得分:0)

我确信有更好的方法可以做到这一点,但我最终做的是:

  1. 由于CKEditor为编辑器的每个实例提供了唯一的名称,因此我使用:CKEDITOR.currentInstance.name作为包装插件中所有html的ID。

  2. 修改我的javascript以基于CKEDITOR.currentInstance.name和我需要的任何特定ID或类来定位所有内容。

  3. 现在,由于每个实例都由该ID区分,因此页面中的所有CKEditor实例都可以正常工作。