Асинхронная команда CKEditor — ручной вызов afterCommandExec

#javascript #ckeditor #ckeditor4.x

#javascript #ckeditor #ckeditor4.x

Вопрос:

Я пытаюсь использовать флаг асинхронности, предоставляемый определением команды CKE, как показано в здесь примере.

У меня есть команда, которая открывает диалоговое окно пользовательского интерфейса jQuery, в котором вводятся некоторые данные от пользователя. Эта часть работает нормально. Когда диалоговое окно закрывается (т. Е. Пользователь нажимает OK или Cancel), я пытаюсь сделать так, как показано в примере CKE, и вручную вызвать editor.fire("afterCommandExec") , что приводит к следующей ошибке:

Ошибка неперехваченного типа: не удается прочитать свойство ‘command’ неопределенного

Это происходит отсюда:http://docs.cksource.com/ckeditor_api/symbols/src/plugins_undo_plugin.js.html (строка 69)

 if ( undoManager.enabled amp;amp; event.data.command.canUndo !== false )
        undoManager.save();
  

Я понимаю, почему возникает ошибка: данные о событии не отправляются вместе с вызовом на fire() . Однако в их примере также нет отправленных данных о событиях. Я могу вручную запустить событие с помощью команды в качестве данных, и, похоже, это работает:

 editor.fire("afterCommandExec", {
    command: editor.getCommand('link')
});
  

Однако это не похоже на правильный способ сделать это. Что я делаю не так?

Комментарии:

1. Можете ли вы предоставить полный пример? (с ошибкой .. но, по крайней мере, с полным кодом).

2. Это сложно, потому что это в большом проекте с большим количеством библиотек, но это похоже на то, что могло бы произойти: jsfiddle.net/leetbruh/hdhyg7hh

Ответ №1:

Я бы сказал, что приведенный пример представляет собой минимальный код о том, как использовать, а не реальный рабочий пример, и именно поэтому он может не сработать.

Если ваша ошибка исходит из системы отмены, отметьте, что ваша команда не использует ее с canUndo = false и обработайте добавление в стек отмены самостоятельно, вместо того, чтобы полагаться на него автоматически.

Комментарии:

1. Возможно, вы правы, я просто думаю, что это странно, потому что диспетчер отмены — это стандартный плагин, который довольно распространен. То, что вы предлагаете, сработало бы, но я надеялся, что вместо этого я смогу запустить отмену из события afterCommandExec. Спасибо за ввод