Преобразование модели CKEditor 5 с помощью Promise

Я создаю плагин CKEditor 5, который должен отображать список на основе результата вызова REST. Я зарегистрировал свой элемент схемы с помощью:

editor.model.schema.register('myItem', {
  allowIn: '$root',
  isBlock: true,
  isObject: true
});

Затем добавил преобразователи:

editor.conversion.for('upcast').add(upcastElementToElement({
  view: {
    name: 'div',
    classes: 'myItem'
  },
  model: 'myItem'
}));
editor.conversion.for('dataDowncast').add(downcastElementToElement({
  model: 'myItem',
  view: (modelElement, viewWriter) => {
    return getContent(modelElement, viewWriter);
  }
}));
editor.conversion.for('editingDowncast').add(downcastElementToElement({
  model: 'myItem',
  view: (modelElement, viewWriter) => {
    const div = getContent(editor.model, viewWriter);

    return toWidget( div, viewWriter, { label: 'widget label' } );
  }
}));

Мой метод getContent отвечает за получение данных с помощью вызова REST. Моя проблема в том, что если я использую axios или fetch для получения данных, он возвращает обещание, и я не знаю, как передать результат атрибуту «представление». объекта, переданного методу downcastElementToElement. Этот атрибут «представление» ожидает функцию, которая возвращает объект для отображения. Есть ли способ добиться этого?


person Thomas    schedule 28.11.2018    source источник


Ответы (1)


CKEditor 5 не поддерживает асинхронное преобразование. Это усложнило бы преобразование и создало бы неприятные ощущения, так как редактор нужно было бы заблокировать во время выборки. Я бы предложил создать преобразование синхронизации, а затем после извлечения заменить его вашим конкретным элементом из БД.

person Maciej Bukowski    schedule 29.11.2018
comment
Примером такой функции является загрузка изображений. Заполнитель отображается до тех пор, пока изображение не будет загружено, чтобы был доступен URL-адрес. Преобразование является синхронным (хотя оно преобразуется в заполнитель, если источник еще недоступен). Асинхронность обрабатывается отдельно. - person Reinmar; 29.11.2018
comment
Понятно! Спасибо за предложение и пример. - person Thomas; 30.11.2018