CKEditor: Как уничтожить экземпляр на размытие? - PullRequest
1 голос
/ 20 сентября 2011

У меня есть одна HTML-страница с несколькими div элементами.Каждый раз, когда пользователь нажимает на div, он заменяется на CKEditor на лету:

$('.editable').click(function() {
    editor = CKEDITOR.replace(this);
});

Теперь, если экземпляр CKEditor теряет фокус (событие размытия), мне нужноотправьте содержимое в отдельный скрипт через ajax (если что-то изменилось) и уничтожьте этот экземпляр:

$('.editable').click(function() {
    editor = CKEDITOR.replace(this);
    editor.on('blur', function(e)
    {
        if (e.editor.checkDirty())
           // get data with e.editor.getData() and do some ajax magic 

        e.editor.destroy();
    });
});

Но этот пример не сработает, потому что, я не знаю почему, будет вызван destory()до checkDirty().Как я могу заставить это работать?

1 Ответ

0 голосов
/ 28 сентября 2011

Как насчет того, чтобы поместить destroy() в оператор if()?Вы можете иметь предложение else, которое вызывает уничтожение, если ничего не изменилось.Если что-то изменилось, вы можете вызвать destroy() в условии if после передачи данных.

$('.editable').click(function() {
  editor = CKEDITOR.replace(this);
  editor.on('blur', function(e)
  {
    if (e.editor.checkDirty()) {
       // get data with e.editor.getData() and do some ajax magic
       if ( dataTransferComplete ) {
         e.editor.destroy();
       }

     } else {
       e.editor.destroy();
     }
  });
});

Или вы можете проверить переменную перед вызовом destroy().Установите для этой переменной значение true после завершения передачи данных и в предложении else, поэтому destroy() не будет вызываться, пока вы не проверите изменения и не передали обновленные данные.

$('.editable').click(function() {
  editor = CKEDITOR.replace(this);
  editor.on('blur', function(e)
  {
    var okToDestroy = false;

    if (e.editor.checkDirty()) {
       // get data with e.editor.getData() and do some ajax magic
       okToDestroy = true;
     } else {
       okToDestroy = true;
     }

    if (okToDestroy )
      e.editor.destroy();

  });
});

Это схема, я не тестировал код, но если показывает концепцию.

Будь здоров,Джо

...