ResetIsDirty на FCKeditor сразу после SetHTML - проблема параллелизма / синхронизации с Javascript - PullRequest
1 голос
/ 20 октября 2010

Я использую IsDirty для проверки изменений в моем FCKeditor.К сожалению, кажется, что его функции асинхронны.

Вот код ошибки:

var txtObj = $('activities').EstActText1.id;
var oEditor = FCKeditorAPI.GetInstance(txtObj);
oEditor.SetHTML(jsonObj.DATA.ESTACTTEXT1.toString());
oEditor.ResetIsDirty();

Проблема в том, что SetHTML не вступает в силу немедленно (если вы поставили проверку сразу после использованияGetHTML, он вернет то, что было ранее в текстовой области).Таким образом, ResetIsDirty будет запущен, ТОГДА HTML-код будет фактически изменен, и флаг сброса будет установлен снова.

Можно ли каким-либо образом заставить вызов SetHTML завершиться перед продолжением?Если нет, есть ли способ (кроме вызова гетто setTimeout, который добавляет задержку и не всегда работает), чтобы убедиться, что ResetIsDirty действительно вступит в силу после изменения HTML?

Ответы [ 2 ]

0 голосов
/ 28 марта 2014

Знаю, вопрос не актуален, но может кому-то пригодится.Попробуйте использовать:

ckeditor = CKEDITOR.instances['Editor_ID'];
ckeditor.setData(lyr_data.lyrics,function(){
    ckeditor.updateElement();
    ckeditor.resetDirty();
});
0 голосов
/ 20 января 2011

Мне все еще был бы интересен прямой ответ, но я склоняюсь на сторону того, что это не очень возможно. Это потребовало бы чего-то вроде функции сна, но JavaScript не идет в эту область.

Однако то, что должен сделать, вы должны обработать событие FCKeditor_OnComplete:

function FCKeditor_OnComplete( editorInstance )
{
    editorInstance.Events.AttachEvent( 'OnAfterSetHTML', function(){
        editorInstance.ResetIsDirty(); // clean flag to avoid having to save
    } ) ;
    editorInstance.ResetIsDirty(); //clean flag upon initial load as well
}

Это было помещено в тег скрипта с установленным отсрочкой .

...