2015-03-12 3 views
0

Есть ли способ отключить сортировку атрибутов элементов, чтобы checkDirty() корректно работала, когда allowContent установлен в true?Отключить сортировку атрибутов элемента

Пример сортировки атрибутов here

<div zattribute='z' attribute='a'>simple</div 

получает изменено на

<div attribute="a" zattribute="z">simple</div> 

вызвавшего checkDirty() вызов всегда возвращает истину, даже если пользователь не реально изменить что-либо в пределах Пользовательский интерфейс ckeditor.

ответ

1
CKEDITOR.on('instanceReady', function(ev) { 
    ev.editor.dataProcessor.writer.sortAttributes = 0; 
}); 

отключит атрибут сортировки для всех экземпляров редактора на этой странице. Это не распространяется нигде в документах CKEditor и было обнаружено путем просмотра объекта экземпляра редактора.

+0

Спасибо Den great find. Вместо этого я переключился на использование TinyMCE, потому что он меняет мой контент намного меньше, и разработчики гораздо менее устойчивы к тому, что изменение содержимого без необходимости, как атрибуты сортировки, неприемлемо. – jnoreiga

0

Ваш код делает странные вещи, как звонить editor.resetDirty() на editor#contentDom (для чего?). Кроме того, CKEditor не сортирует атрибуты, потому что единственное, что делает getSnapshot(), составляет редактируемый innerHTML. Поэтому, если что-то сортирует атрибуты, это браузеры, и если они это сделают (я помню, что некоторые делают это случайным образом), тогда вы ничего не можете сделать.

Вам необходимо начать с нуля. Сначала определите, чего вы хотите достичь, и сделайте это с минимальным кодом. Я бы также посоветовал вам не использовать editor.checkDirty(), потому что это унаследованный метод, который не будет работать в определенных случаях (да, это отсутствует в документах). Используйте editor#change, чтобы получать прямые уведомления об изменениях или просто сравнивать editor.getData() время от времени.

+1

Я добавил editor.resetDirty(), чтобы гарантировать, что значение _.previousvalue было установлено ПОСЛЕ того, как html автоматически обрабатывается (я не видел ничего в документе, когда это значение установлено, чтобы я мог использовать метод checkDirty). Если разработчикам не следует использовать checkDirty(), я думаю, что документ должен быть обновлен. Я думал, что могу использовать его, чтобы проверить, был ли контент изменен пользователем. У меня есть обновленная функция isdirty, основанная на ваших предложениях. https://jsfiddle.net/4t72c4n1/5/ – jnoreiga

+0

Кроме того, какова цель сортировки атрибутов элемента. Мои клиенты будут задаваться вопросом, почему он появляется в инструменте сравнения версий, предоставляемом им. Он будет переупорядочен, даже если ничего не изменит. – jnoreiga

1

This - это то, что я использовал на основе предложений Рейнмара.

jsfiddle

var isdirty = function(ckeditor) { 
     return ckeditor.initialdata !== ckeditor.getData(); 

    }; 
CKEDITOR.on('instanceReady', function (event) { 
     event.editor.initialdata = event.editor.getData(); 
    }); 

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

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