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

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

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

Uncaught TypeError: не удается прочитать свойство «команда» неопределенного

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

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

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

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

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


person Scott C    schedule 19.10.2016    source источник
comment
Можете ли вы привести полный пример? (с ошибкой.. но хотя бы полным кодом).   -  person Dekel    schedule 20.10.2016
comment
Это сложно, потому что это большой проект с большим количеством библиотек, но это похоже на то, что должно произойти: jsfiddle .net/leetbruh/hdhyg7hh   -  person Scott C    schedule 20.10.2016


Ответы (1)


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

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

person AlfonsoML    schedule 21.10.2016
comment
Возможно, вы правы, я просто думаю, что это странно, потому что менеджер отмены — это стандартный плагин, который довольно распространен. То, что вы предлагаете, сработает, но я надеялся, что вместо этого смогу вызвать отмену из события afterCommandExec. Спасибо за вклад - person Scott C; 25.10.2016