В настоящее время я создаю виджет «smartobject». В диалоговом окне виджетов пользователь может выбрать «smartobject», который просто помещает, генерирует некоторый html, который должен быть добавлен в редактор. Здесь идет сложная часть: html иногда элементы div, а иногда просто элементы span. В случае варианта div виджет должен быть обернут в div 'template'. В случае варианта span виджет должен быть обернут в промежутке, а html следует добавить «inline».CKEditor: несколько шаблонов виджета
В API виджетов я вижу следующий способ определения шаблона:
editor.widgets.add('smartobject', {
dialog: 'smartobject',
pathName: lang.pathName,
template: '<div class="cke_smartobject"></div>', // <------
upcast: function(element) {
return element.hasClass('smartObject');
},
init: function() {
this.setData('editorHtml', this.element.getOuterHtml());
},
data: function() {
var editorHtml = this.data.editorHtml;
var newElement = new CKEDITOR.dom.element.createFromHtml(editorHtml);
newElement.copyAttributes(this.element);
this.element.setText(newElement.getText());
}
});
Но в моем случае, шаблон более динамична: иногда ДИВ, а иногда пролет будет делать правильные вещи ..
Как я могу исправить это, не создавая два виджета, которые будут делать то же самое, только в качестве разницы?
Я уже пытался заменить весь элемент в методе «данных», как:
newElement.replace(this.element);
this.element = newElement;
Но это, казалось, не поддерживаются: в результате неопределенных ошибок после вызова editor.getData().
Я использую CKEditor v4.5.9
Спасибо за вашу помощь!
Можете ли вы использовать обертку div в обоих случаях и изменить поведение этого div с помощью css? – Atzmon
Это хорошая идея, но я боюсь, что нет, потому что при добавлении smartobject в следующем HTML (при выборе [smartobject] текст):
этот текст содержит [smartobject]
HTML, становится недействительным не позволил. – NickGreen