我有一个 ckeditor5 自定义插件,我必须将标记转换为数据以保存到数据库中。
这是模型:X[Y]Z
标记名称为“my-highlight:1”
这就是我想要的:
X<my-highlight-start name="1"></my-highlight-start><span class="my-highlight">Y</span><my-highlight-end name="1"></mű-highlight-end>Z
因此,我需要在标记范围的开头和结尾处都有开始/结束标记,并且还需要跨越文本节点。
我能做什么:
X<my-highlight-start name="1"></my-highlight-start>Y<my-highlight-end name="1"></my-highlight-end>Z
或
X<span class="my-highlight">Y</span><Z
但不能同时进行。
我需要跨度,因为我必须在浏览器中突出显示文本,并且我需要开始/结束标签,因为突出显示可以重叠,并且用户可以为突出显示添加注释。
所以我处理后的输出会是这样的:
X(1)Y(1)Z
对于重叠的情况:
X(1)(2)AB(2)C(3)D(1)Z(3)
这是我的插件配置的一部分:
editor.conversion.for('dataDowncast')
.markerToHighlight(data_markerToHighlightConfig)
.markerToData(data_markerToDataConfig);
在我看来,两者都不能这样工作。这里只有markerToData 有效。如果我只添加其中之一有效,那么我对markerToHighlight和markerToData的配置就可以了。 我调试了,当我添加两者时,只调用了markerToData。
以下是配置:
const data_markerToDataConfig = {
model: "my-highlight"
};
const data_markerToHighlightConfig = {
model: "my-highlight",
view: { classes: "my-highlight" }
};
线上行动: https://peterborkuti.github.io/ckeditor-bphighlight/
实际操作中,请查看控制台的 getData():
当仅启用markerToHighlight时,只有span存在(OK)
当仅启用markerToData时,只有开始/结束标记(OK)
提前谢谢您
我从 ckeditor 支持处得到了答案。我不确定是否可以公开分享原始答案,但原因是:
markerToData 和markerToHighlight 在设计上不能一起使用。文档中缺少此信息。为了处理这种情况,应该编写一个自定义转换器。
当我完成自定义转换器后,我会在这里分享。