我正在使用ExtJS,我的表格中有一个htmleditor。我想为该元素添加一个自定义按钮(例如在对齐,字体权重等所有其他按钮之后)。这个按钮基本上应该在htmlfield中插入一个标准模板。作为这个模板html,按钮的行为应该是这样的
感谢您的关注
答案 0 :(得分:12)
您无需切换到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 (或 ateodorescu/mzExt for ExtJS 4)。在那里你可以找到更多关于添加自定义按钮的信息,例如,如何在选择内容时启用/禁用按钮,放置分隔符等。
答案 1 :(得分:1)
您也可以使用ExtJS.ux.HtmlEditor.Plugins:https://github.com/VinylFox/ExtJS.ux.HtmlEditor.Plugins
答案 2 :(得分:0)
除了上面的@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
}
});