在 ckeditor5 下拉项上注册点击侦听器

2023-12-11

我目前正在尝试编写一个插件CK编辑器5支持自动翻译。我发现如何编写插件以及如何在文档中创建下拉菜单。

但在文档中没有提及(或者我错过了)如何获知有关单击值的信息:

  • 打开下拉列表的按钮有一个执行处理程序,但如何注册一个监听器来单击其中一个值?
  • 我可以分配一个id或者类似于我的项目来识别下拉列表右侧元素的点击?

这是我根据文档构建的代码:

class Translation extends Plugin {
    init() {
        this.editor.ui.componentFactory.add('translate', (locale) => {
            const dropdownView = createDropdown(locale);
            dropdownView.buttonView.set({
                icon: languageIcon,
                label: 'Translate',
                tooltip: true,
            });

            const items = new Collection();
            items.add({
                id: 'en', // how to assign id ???
                type: 'button',
                model: new Model({
                    withText: true,
                    label: 'English'
                }),
            });
            items.add({
                id: 'es', // how to assign id ???
                type: 'button',
                model: new Model({
                    withText: true,
                    label: 'Spanish'
                }),
            });
            addListToDropdown(dropdownView, items);

            // callback for click on item ????
            dropdownView.on('click', (event) => {
                console.log('click', event);
            });

            return dropdownView;
        });
    }
}

您可以使用DropdownView.on()聆听的方法execute event.

并且,使用事件信息源属性来获取被单击的对象,然后使用其属性,例如id or label来识别它。

例如:

const items = new Collection();
items.add( {
    type: 'button',
    model: new Model({
        id: 'en',                // id 
        withText: true,
        label: 'English',
    })
} );
items.add( {
    type: 'button',
    model: new Model({
        id: 'es',               // id
        withText: true,
        label: 'Spanish'
    })
} );

addListToDropdown(dropdownView, items);

dropdownView.on('execute', (eventInfo) => {
    const { id, label } = eventInfo.source;

    if ( id === 'en' ) {
        console.log('Object (en):', label);
    } else if ( id === 'es' ) {
        console.log('Object (es):', label);
    }
});

这是完整的工作示例ClassicEditor(已测试):

import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
import Model from '@ckeditor/ckeditor5-ui/src/model';
import Collection from '@ckeditor/ckeditor5-utils/src/collection';
import { createDropdown, addListToDropdown } from '@ckeditor/ckeditor5-ui/src/dropdown/utils';
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';

const Translate = 'translate';

class Translation extends Plugin {
    init() {
        console.log('Translation initialized!');

        this.editor.ui.componentFactory.add(Translate, (locale) => {
            const dropdownView = createDropdown(locale);
            dropdownView.buttonView.set({
                label: 'Translate',
                withText: true,
            });

            const items = new Collection();
            items.add( {
                type: 'button',
                model: new Model({
                    id: 'en',
                    withText: true,
                    label: 'English',
                })
            } );
            items.add( {
                type: 'button',
                model: new Model({
                    id: 'es',
                    withText: true,
                    label: 'Spanish'
                })
            } );

            addListToDropdown(dropdownView, items);

            dropdownView.on('execute', (eventInfo) => {
                const { id, label } = eventInfo.source;

                if ( id === 'en' ) {
                    console.log('Object (en):', label);
                } else if ( id === 'es' ) {
                    console.log('Object (es):', label);
                }
            });

            return dropdownView;
        });
    }
}

ClassicEditor
    .create( document.querySelector( '#editor' ), {
        plugins: [ Essentials, Translation ],
        toolbar: [ Translate ]
    } )
    .then( editor => {
        console.log( 'Editor was initialized', editor );
    } )
    .catch( error => {
        console.error( error.stack );
    } );

单击这两项后控制台输出:

Object (en): English
Object (es): Spanish
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ckeditor5 下拉项上注册点击侦听器 的相关文章

  • 如何使用ssr在nuxt中添加ckeditor插件

    我正在尝试在我的通用 nuxt 应用程序中添加 ckeditor 5 的对齐插件 SSR 我在插件中尝试过这样 import Vue from vue import ClassicEditor from ckeditor ckeditor5
  • Ckeditor 在 p 标签的开头和结尾显示额外的空间

    我在我的小型网络项目中使用 ckeditor 但是当我编辑内容或创建新内容时 它会在 p 标签和文本的开头后自动添加空格 当我删除空格并保存内容时它会起作用 但是当我再次编辑 它又添加了空格 如何删除它 我认为 p 标签的开头和文本之间的空
  • 单击任意位置以在 CKEditor 中聚焦

    在 FireFox 中 我可以单击 CKEditor 350px x 250px 中的任意位置 将焦点放在编辑器顶部的单个文本段落上 然而 在 IE6 中 我知道 但我们的客户坚持 我必须直接单击段落顶部以将光标聚焦并随后编辑文本 CKEd
  • 如何在CKeditor中添加音频标签

    我已经添加了html5audio插件并能够获取上传按钮 但如何将上传的文件发送到服务器 这是我的插件代码 id Upload hidden false filebrowser uploadButton label editor lang h
  • Typo3 CKEditor 图片来自 FAL

    我使用 CKEditor 设置了全新的 TYPO3 8 7 4 安装 并且rte ckeditor image从 FAL 获取图像 在文档中rte ckeditor image它说 最大尺寸与魔法图像的配置有关 必须在 Page TSCon
  • CKEDITOR:如何转换所有 html 实体

    这是清单 http www elizabethcastro com html extras entities html http www elizabethcastro com html extras entities html我要么想启用
  • ckeditor“key”的使用 CKEDITOR.instances.editor.on('key', function (e){

    我意识到存在有关如何为 CKEDITOR 4 实现事件处理程序的问题 我可以使用此代码来获取按键按下数据 但我似乎无法在按键后获取数据 CKEDITOR instances editor on key function e document
  • 有谁知道 ckeditor 的拼写检查器插件使用 aspell 或类似的本地服务而不是pellchecker.net? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VueJS CKeditor5上传图片

    在 Vuejs 中使用 CKeditor5 上传图像时遇到问题 第一次尝试过简单上传适配器 https ckeditor com docs ckeditor5 latest features image upload simple uplo
  • 如何删除ckeditor中的表单工具并调整大小

    我在我的项目中使用 CKEditor 我的要求是删除 FORM TOOLS 并设置 CKEditor 的大小ADJUSTABLE 到目前为止 我已成功在网页中显示编辑器 我已经搜索过谷歌 但不幸的是我什么也没得到 请帮助我解决这个问题 试试
  • CKEditor 新实例始终卸载

    我在 Angular 应用程序中使用 CKEditor 并且有一个视图 每次用户访问新模型时都会重新加载我的 CKEditor 实例 我使用以下 JS 来初始化编辑器 var initEditor function js editor wr
  • ReferenceError:CKEDITOR 未定义

    我正在尝试使用CK编辑器 http ckeditor com 但是当我尝试时出现以下错误 在 JS 控制台中 例子 http docs ckeditor com guide dev framed从教程中 浏览器中仅显示一个文本框 Refer
  • CKEditor 3.x - 动态添加 UI 元素到插件对话框

    我正在构建一个 CKEditor 3 x 插件 它允许通过与我们的后端系统绑定的单独查看器应用程序有条件地显示 HTML 的某些部分 我的 CKEditor 插件将用于定义这些条件 但我对如何动态地将 UI 元素添加到插件对话框感到困惑 在
  • CKEditor 4 构建(缩小和丑化)

    在我们的构建过程中 使用 grunt 我们将所有脚本连接 缩小和丑化为一个脚本 也意味着仅一个请求 现在 CKEditor 4 似乎正在使用模块样式加载方法 谁能告诉我如何将 CKEditor 4 包含到包含所有必需源的项目中 这样以后就不
  • 使用 jQuery 将光标位置处的文本插入到 CKEditor

    我正在尝试使用 jQuery 将一段文本添加到现有的 CKEditor 单击链接时需要完成此操作 我尝试了这个解决方案 它适用于常规文本区域 但不适用于 CKEditor jQuery fn extend insertAtCaret fun
  • CckEditor - 从 AJAX 加载的模板

    我正在使用 CkEditor 并且想要定义一个自定义模板 该模板使用 AJAX 函数来加载 HTML 字符串 我已经能够定义自定义模板 但如果我对模板对象的 html 属性使用函数 则该函数永远不会执行 是否可以使用 AJAX 和默认模板插
  • 如何在CKEditor 5中监听焦点事件

    我想听一下 CKEditor 5 中的焦点事件 我认为这样的事情会起作用 但回调从未被调用 document querySelector editable ClassicEditor create el then editor gt edi
  • 如何在 CKEDITOR.inline 之后使用 CKEDITOR.replace

    我在内联模式下使用 CKEDITOR 每页有多个编辑器 为了创建它们 我使用
  • 基于 ajax 的弹出窗口中的 Mathjax + CKEditor 4 + CKEditor

    我已经配置了 CKEditor 4 并且我的页面上有以下内容 我的页面中有一个 CKEditor 设置值的两个选项 这两个选项本身分别选项两个基于 ajax 的弹出窗口 这些基于 ajax 的弹出窗口包含 CKEditor 现在我有以下问题
  • CKEditor - 将上下文菜单项添加到图像

    我想仅为选定的图像元素添加上下文菜单项 上下文菜单项当前正在工作 但它显示在每个元素上 而不仅仅是图像元素上 到目前为止 这是我的代码 CKEDITOR on instanceReady function ev editor addComm

随机推荐

  • 如何在 Excel 中查找拼写错误的文本之间的匹配项?

    我有两列数据 其中有一百个名字 我需要找到匹配项 问题是第二列上的名称与第一列上的名称不完全相同 很难用一百个名字来匹配他们 excel中是否有任何公式至少可以给出数据的公差 例如 Setyadi 与 Setiadi 或 Tak Jelan
  • 时间戳/日期作为 cassandra 列族/hector 的关键

    我必须创建并查询一个复合键为 timestamp long 的列族 还 查询时我想触发时间戳范围查询 例如 xxx 和 yyy 之间的时间戳 这可能吗 目前我正在做一些非常有趣的事情 我知道这是不正确的 我为给定范围创建带有时间戳字符串的键
  • Codeigniter simple_query 与查询生成器(插入、更新和删除)

    根据文档 simple query不会返回任何数据库结果集 也不会设置查询计时器 或编译绑定数据 或存储查询以进行调试 正如在我的 CodeIgniter 中一样 我使用 CI 提供的查询生成器来生成查询 那么 这些用于插入 更新和删除的查
  • 从非 UI 线程弹出对话框

    我正在开发一个面向团体的网络应用程序 问题是 当我要加入一个组时 它首先检查该组是否安全 如果是 它会要求输入用户名和密码 获得组安全性可能需要几秒钟 因此我为整个过程生成一个新线程 我想弹出一个对话框 以防该组需要安全性 我认为这可能与后
  • 在 C++ 中处理巨大的多维数组

    我正在用 C 设计一款类似于 Minecraft 的游戏 它在内存中保存了大量的地形数据 一般来说 我想在内存中存储一 个数组 即 5 4 5 50 50 50 这还不错 因为它相当于大约 100mb 的虚拟内存 而我的结构只有大约 8 个
  • 为什么重新分配后变量的类型再次变为“未知”

    Why value属于类型unknown分配后再次string to it TypeScript Playground 中的示例 function example boolean let value unknown something ma
  • 如何更改 WooCommerce 订阅中的价格字符串

    我需要一个更好的方法来做到这一点 目前 我已将代码直接添加到 class wc subscriptions product php 文件中的 get price string 函数中 因此当设置免费试用版时 我可以更改添加到价格字符串中的文
  • 为什么“边框颜色”被“颜色”覆盖?

    我有以下CSS isActiveFilter color black background color rgba 0 184 170 5 padding 15px 10px 10px 10px border color red border
  • 检测 UIPopoverController 何时完成呈现 UIImageViewcontroller

    我将 UIImagePickerController 作为 UIPopoverController 的内容视图控制器 我需要检测弹出窗口何时刚刚完成呈现 刚刚出现 UIPopoverController 没有任何委托 我似乎也找不到检测 U
  • 如何让 Geolocation API 在 Dartium 中工作?

    我正在尝试使用 Geolocation API 在 Dartium 浏览器中进行测试 我特别尝试执行以下操作 window navigator geolocation getCurrentPosition then pos window a
  • python 使用字符串列表创建字典,并将字符串长度作为值

    我确信这是可以做到的 但到目前为止我还没有成功 我有一个字符串列表 我想创建一个字典 其中所述字符串的长度 可以表示为范围 作为键 字符串本身作为值 例子 这是类似我的列表 foo bar help this guy 我想最终得到一本这样的
  • 如何找到 PHP 项目中未使用的函数

    如何找到 PHP 项目中未使用的函数 PHP 中是否有内置的功能或 API 可以让我分析我的代码库 例如反射 token get all 这些 API 的功能是否足够丰富 让我不必依赖第三方工具来执行此类分析 您可以尝试 Sebastian
  • C# 列格式设置

    我正在尝试将一些输出格式化到控制台 但解决方案存在一些问题 我在 C 中执行此操作 但每次调用 Console Write 时 它 都会将整个内容打印到控制台的最后 然后开始一个新行 所以我想做的是将其调整为四列 然后在那里开始一个新行 以
  • 返回指针后删除堆

    我有一个如下的功能 int readFile string InputPath int myvar new int 10 The file has 10 lines Using heap ifstream inFile inFile ope
  • 带有参数的 Facebook 帖子

    我需要在 Facebook 上发布带有参数的帖子 我使用了这里的解决方案 动态生成 Facebook Open Graph 元标签和这里 WordPress PHP 中的动态 Facebook 和元标签 最终工作代码
  • 使用 WatiN 进行自动完成下拉菜单测试

    我正在使用 WatiN 来测试自动完成下拉列表 当用户在输入 3 个字符后在字段中键入时 将触发 jquery 自动完成并显示无序列表 用户必须从列表中进行选择 我无法使用 WatiN 从列表中进行选择 触发自动完成 以下是开发人员使用的一
  • ASP.NET Ajax 客户端框架无法加载。当将 ScriptManager 放在空白页上时

    我有一个错误Microsoft JScript 运行时错误 ASP NET Ajax 客户端框架无法加载 使用母版页在空白页上
  • GGplot2 中面板背景的条件格式

    我想知道是否有一种 直接 方式将 ggplot 分面面板中回归线的斜率链接到该面板的背景颜色 即在视觉上将大网格中的正斜率与负斜率分开 我了解如何在 GGplots 中添加回归线 正如上所解释的那样使用 R 中的 qplot 将回归线添加到
  • 使用 simpledateformat 将日期转换为字符串

    我在将日期转换为不同格式的字符串时遇到问题 日期 lastDownloadDate gt gt Wed Feb 27 16 20 23 IST 2013 lastChangeDate gt gt Wed Feb 27 15 11 00 IS
  • 在 ckeditor5 下拉项上注册点击侦听器

    我目前正在尝试编写一个插件CK编辑器5支持自动翻译 我发现如何编写插件以及如何在文档中创建下拉菜单 但在文档中没有提及 或者我错过了 如何获知有关单击值的信息 打开下拉列表的按钮有一个执行处理程序 但如何注册一个监听器来单击其中一个值 我可