使用toggleSourceEdit()
すると、いくつかの問題が発生しました。1 つは、250 ミリ秒程度のタイムアウトを使用しない限り、エディタがソース編集モードと WYSIWYG モードの間のどこかに置かれているように見えることです。また、そのエディターにフォーカスを置きます。特に、フォームがスクロールせずに見える位置にあり、ブラウザーが開いたときにフォーカスされた 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();
}
}
});