我最近从 tinymce 4 迁移到 tinymce 5,我无法弄清楚如何创建一个像按钮这样的下拉菜单并根据当前选择更改其文本。
基本上,我想要一些类似默认字体或标题按钮的东西。
这是我创建一个下拉按钮的方法,该按钮将使用<span lang='xx'
标签包装选定的文本。
addLanguageBtn()
{
let lngBtn = editor.ui.registry.addMenuButton('languageBtn', {
text: 'Language',
fetch: (callback) => {
let items: any = [
{text: 'French', value: 'fr', type: 'menuitem'},
{text: 'German', value: 'de', type: 'menuitem'},
{text: 'Spanish', value: 'es', type: 'menuitem'},
];
items.forEach(item => {
item.onAction = () => {
let currentNode = editor.selection.getNode();
if (currentNode.tagName.toLocaleLowerCase() !== 'body')
{
currentNode.setAttribute('lang', item.value);
}
else
{
let textToWrap = editor.selection.getContent();
let wrappedContent = `<span lang='${item.value}'>${textToWrap}</span>`;
editor.selection.setContent(wrappedContent);
}
}
});
callback(items);
},
在tinymce的主要方法中,每当光标放在标签setup
内的单词上时,我想将该按钮的文本更改为所选语言<span lang='xx'
setup(ed)
{
let lngButton = this.addLanguageBtn(ed);
ed.on('NodeChange', function (ev) {
if (!lngButton)//No button
{
return;
}
let lang = ev.element.getAttribute('lang');
lngButton.text = lang; // <==== This does not work, value is modified but UI is not updated
笔记
这是一个代码笔示例
编辑:我查看了 tinymce 的源代码,据我所知,他们使用 Alloy 组件创建自己的字体系列和字体粗细按钮。我只是在寻找“简单”的东西。