2010-10-19 2 views
1

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

Вот неисправная код:

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-кода?

ответ

0

Меня все равно интересовал бы прямой ответ, но я склоняюсь к тому, что это не очень возможно. Для этого потребуется что-то вроде функции сна, но 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 
} 

Это был помещен в тег сценария с DEFER набор .

0

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

ckeditor = CKEDITOR.instances['Editor_ID']; 
ckeditor.setData(lyr_data.lyrics,function(){ 
    ckeditor.updateElement(); 
    ckeditor.resetDirty(); 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^