插件不适用于 Vue 组件中的多个 CKEditor4 实例

如何解决插件不适用于 Vue 组件中的多个 CKEditor4 实例

我为我的网站使用 CKEditor 4 创建了一个用于富文本编辑的 Vue 组件。当这个组件第一次挂载时,编辑器和所有插件都可以正常工作,但是当同一组件的另一个实例在同一页面上动态挂载时,涉及弹出对话框的 Table、Image 等插件会做不起作用(我无法在对话框中输入任何文本输入,例如表列和行)。官方 ckeditor4-vue 包也存在同样的问题。我试图通过使用通用包 (zip) 而不是 vue 特定的包来解决这个问题,但这没有帮助。这是我的代码

<template>
    <div>
        <textarea v-bind:id="fieldName" v-bind:name="fieldName" v-model="content"></textarea>
    </div>
</template>

<script>
    import './config';
    import './ckeditor/ckeditor';
    export default {
        props: {
            currentContent: {
                type: String,default: null,},fieldName: {
                type: String,default: 'content',toolbarType: {
                type: String,default: 'Full',data: function () {
            return {
                editorConfig: {
                    toolbar_Full: null,toolbar: this.toolbarType,editor: null,content: null,initialized: false,siteUrl: siteUrl,};
        },mounted: function () {
            let vm = this;
            vm.initializeTextarea();
        },beforeDestroy: function () {
            let vm = this;
            vm.destroyTextarea();
        },methods: {
            initializeTextarea: function () {
                let vm = this;
                var editorConfig = JSON.parse(JSON.stringify(vm.editorConfig));
                vm.editor = CKEDITOR.replace(vm.fieldName,editorConfig);
                console.log("After Initialize: CKEditor Instances: ",CKEDITOR.instances);
            },destroyTextarea: function () {
                let vm = this;
                CKEDITOR.instances[vm.fieldName].destroy();
                console.log("After Destroy: CKEditor Instances: ",};
</script>

为了重现这个问题,可以将组件导入到另一个组件中,并且可以使用 v-if 动态添加同一组件的第二个实例,上述插件在第二个(动态创建的)实例中将无法正常工作。

编辑 我尝试将 v-if 更改为 v-show 以检查两者是否同时初始化是否有效,但这也无济于事。即使两个编辑器实例都出现在一个简单的 HTML 页面上,这些插件也不起作用。

解决方法

Vue 需要一个键来区分同一组件的不同实例。你会在 v-for 中做同样的事情。 我认为您不需要执行初始化/销毁过程,而只需将所需的属性绑定到编辑器,并为注入该组件的父级提供一个键。

,

原来是一个jQuery对话框干扰了CKEditor的对话框。一旦编辑器被放置在对话框之外,只要没有其他 jQuery 对话框在同一窗口/选项卡上打开,插件就会工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?