Использование toggleSourceEdit()
вызвало некоторые проблемы для меня. Во-первых, казалось, что редактор находился в подвешенном состоянии между редактированием исходного кода и режимом WYSIWYG, если я не использовал время ожидания 250 мс или около того. Он также помещает фокус в этот редактор, и я не хочу начинать фокус формы в редакторе, тем более что он находится ниже сгиба, и браузер прокручивает его в фокусированный редактор HTML, когда он открывается.
Единственное, что мне помогло, это расширить Ext.form.HtmlEditor
, а затем переписать toggleSourceEdit
, удалив команду фокусировки. Затем добавьте слушатель для переключения в редактор исходного кода при инициализации компонента. Это для Ext 4.1 и выше. Для более старых версий замените me.updateLayout()
на me.doComponentLayout()
.
var Namespace = {
SourceEditor: Ext.define('Namespace.SourceEditor', {
extend: 'Ext.form.HtmlEditor',
alias: 'widget.sourceeditor',
initComponent: function() {
this.callParent(arguments);
},
toggleSourceEdit: function (sourceEditMode) {
var me = this,
iframe = me.iframeEl,
textarea = me.textareaEl,
hiddenCls = Ext.baseCSSPrefix + 'hidden',
btn = me.getToolbar().getComponent('sourceedit');
if (!Ext.isBoolean(sourceEditMode)) {
sourceEditMode = !me.sourceEditMode;
}
me.sourceEditMode = sourceEditMode;
if (btn.pressed !== sourceEditMode) {
btn.toggle(sourceEditMode);
}
if (sourceEditMode) {
me.disableItems(true);
me.syncValue();
iframe.addCls(hiddenCls);
textarea.removeCls(hiddenCls);
textarea.dom.removeAttribute('tabindex');
//textarea.focus();
me.inputEl = textarea;
} else {
if (me.initialized) {
me.disableItems(me.readOnly);
}
me.pushValue();
iframe.removeCls(hiddenCls);
textarea.addCls(hiddenCls);
textarea.dom.setAttribute('tabindex', -1);
me.deferFocus();
me.inputEl = iframe;
}
me.fireEvent('editmodechange', me, sourceEditMode);
me.updateLayout();
}
})
}
Затем использовать его:
Ext.create('Namespace.SourceEditor', {
/*regular options*/
listeners: {
initialize: function(thisEditor) {
thisEditor.toggleSourceEdit();
}
}
});