【发布时间】:2021-01-02 01:47:32
【问题描述】:
所以我有一个呈现自定义组件的自定义小部件。
conversion.for('editingDowncast').elementToElement({
model: 'modelName',
view: (modelElement, viewWriter) => {
const modelName = modelElement.getAttribute('modelName');
const modelNameView = viewWriter.createContainerElement('span', {
class: 'modelName',
'data-modelName': modelName,
});
const reactWrapper = viewWriter.createUIElement(
'span',
{
class: 'modelName__react-wrapper',
},
function (this, domDocument) {
const domElement = this.toDomElement(domDocument);
rendermodelName(modelName, domElement);
return domElement;
},
);
viewWriter.insert(
viewWriter.createPositionAt(modelNameView, 0),
reactWrapper,
);
return toWidgetEditable(modelNameView, viewWriter);
},
});
rendermodelName 将返回一个带有简单输入框的 React 组件
return (
<div>
<input type="text" />
</div>
);
https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/frameworks/react.html.
但问题是,每当我尝试在输入中添加一些内容时,焦点就会从字段中丢失并自动移动到周围的编辑器中。我错过了什么。尝试创建一个焦点处理程序并将modelNameView 添加到其中。
我应该使用新的createRawElement 吗?我目前的 CK5 是 20.0.0 所以我不希望现在有任何重大变化。
编辑:
我研究了一点。好像createRawElement 在这里可能行不通。我认为这没有一个简单的解决方案。我尝试使用allowContentOf: '$block',这也让我无法集中注意力。但是这些值是针对普通 CK 小部件的,而不是针对 react 组件的。
【问题讨论】: