Итак, у меня есть настраиваемый виджет, который отображает настраиваемый компонент.
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, а не для компонента реакции.