我正在使用 ExtJS,并且我的表单中有一个 htmleditor。我想为该元素添加一个自定义按钮(例如,在所有其他按钮之后,如对齐、字体粗细……)。这个按钮基本上应该在 htmlfield 中插入一个标准模板。作为这个模板html,按钮的行为应该是这样的
- 切换到 HTML 模式(比如按下 Source 按钮时)
- 插入东西
- 切换回 WYSIWYG 模式(例如再次按下 Source 按钮时)
感谢您的关注
我正在使用 ExtJS,并且我的表单中有一个 htmleditor。我想为该元素添加一个自定义按钮(例如,在所有其他按钮之后,如对齐、字体粗细……)。这个按钮基本上应该在 htmlfield 中插入一个标准模板。作为这个模板html,按钮的行为应该是这样的
感谢您的关注
您无需切换到 HTML 模式。只需将该insertAtCursor
函数与 HTML 模板一起使用。
我做了这个简单的例子来说明如何添加插入水平标尺(<hr>
标签)的按钮:
Ext.ns('Ext.ux.form.HtmlEditor');
Ext.ux.form.HtmlEditor.HR = Ext.extend(Ext.util.Observable, {
init: function(cmp){
this.cmp = cmp;
this.cmp.on('render', this.onRender, this);
},
onRender: function(){
this.cmp.getToolbar().addButton([{
iconCls: 'x-edit-bold', //your iconCls here
handler: function(){
this.cmp.insertAtCursor('<hr>');
},
scope: this,
tooltip: 'horizontal ruler',
overflowText: 'horizontal ruler'
}]);
}
});
Ext.preg('ux-htmleditor-hr', Ext.ux.form.HtmlEditor.HR);
Ext.QuickTips.init();
new Ext.Viewport({
layout: 'fit',
items: [{
xtype: 'htmleditor',
plugins: [new Ext.ux.form.HtmlEditor.HR()]
}]
});
你可以看到它运行在:jsfiddle.net/protron/DCGRg/183/
但我真的建议您查看HtmlEditor.Plugins(或用于 ExtJS 4 的ateodorescu/mzExt )。在那里您可以找到更多关于添加自定义按钮的信息,例如,如何在选择某些内容时启用/禁用按钮、放置分隔符等。
您还可以使用 ExtJS.ux.HtmlEditor.Plugins :https ://github.com/VinylFox/ExtJS.ux.HtmlEditor.Plugins
除了上面的@proton很好的答案之外,还有另一种将按钮插入工具栏的方法,与将它们添加到末尾不同。在我的回答中,我会将它写为一个名为“RichTextBox”的新控件(而不是作为插件),但这可以通过任何其他方式完成:
Ext.define('Ext.ux.form.RichTextBox', {
extend: 'Ext.form.field.HtmlEditor',
xtype: 'richtextbox',
enableSourceEdit: false, // i choose to hide the option that shows html
initComponent: function () {
this.on('render', this.onRender, this);
this.callParent();
},
/**
* Insert buttons listed below to the html-editor at specific position.
* handler is implemented using 'execCommand':
* https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
*/
onRender: function () {
var me = this;
var tb = me.getToolbar();
var btns = {
StrikeThrough: {
//xtype: 'button', // button is default item for this toolbar
itemId: 'btnStrikeThrough',
iconCls: 'x-toolbar-strikethrough ', //choose icon with css class
enableOnSelection: true,
overflowText: 'StrikeThrough',
tooltip: {
title: 'StrikeThrough',
text: 'Toggles strikethrough on/off for the selection or at the insertion point'
},
handler: function () {
this.getDoc().execCommand('strikeThrough', false, null);
},
scope: this,
},
/** Seperator */
sep: "-"
};
tb.insert(5, btns.StrikeThrough); // insert button to the toolbar
//tb.insert(10, btns.sep); // add seperator
//tb.remove(26); // remove button, seperator, etc.
this.callParent(); //important: call regular 'onRender' here or at the start of the foo
}
});