Как проверить, отформатирован ли выбранный текст?

#reactjs #ckeditor #ckeditor5

#reactjs #ckeditor #ckeditor5

Вопрос:

Я хочу использовать свои собственные кнопки вместо панели инструментов по умолчанию. Для выделенного жирным шрифтом текста я использую что-то вроде этого:

 <BoldButton onClick={this.onBoldClick} />

onBoldClick = () => {
    editor.execute('bold');
};
  

И это работает нормально. Но когда я нажимаю на выделенный текст, я хочу, чтобы моя кнопка была серой, но если я нажимаю на какой-то выделенный жирным шрифтом текст, я хочу, чтобы кнопка была зеленой. Я понятия не имею, как я могу этого добиться. Я вижу, что в оригинальной выделенной жирным шрифтом кнопке есть какой-то фрагмент ответа кода для этого, но я не знаю, как я могу использовать его в моем случае:

 view.bind( 'isOn', 'isEnabled' ).to( command, 'value', 'isEnabled' );
this.listenTo( view, 'execute', () => editor.execute( BOLD ) );
  

Есть идеи, как я могу подойти к этому?

Ответ №1:

Команды CKEditor 5 имеют наблюдаемые свойства: value и isEnabled . Вы можете присоединять слушателей и реагировать при изменении этих свойств:

 const command = editor.commands.get( 'bold' );

command.on( 'change:isEnabled', () => {
    if ( command.isEnabled ) {
        // Make the button enabled.
    } else {
        // Make the button disabled.
    }
} );

command.on( 'change:value', () => {
    if ( command.value ) {
        // Make the button green.
    } else {
        // Make the button gray.
    }
} );
  

Ознакомьтесь с руководством по использованию внешнего пользовательского интерфейса с CKEditor 5, чтобы узнать больше.