1

我在 tinyMCE 中启用了“fontsizeselect”插件。我的问题是如何删除下拉菜单的标题(标题)?

在此处输入图像描述

编辑:

我尝试使用 JQuery .remove() 删除它,但之后整个列表的高度计算错误。

我尝试的第二个选项是:

http://www.tinymce.com/wiki.php/API3:method.tinymce.ui.DropMenu.remove

但这只是出错了,“fontsizeselect.remove(title)”(类似于 .add)对整个 tinyMCE 产生错误 - “缺少:在属性 id 之后”。这样做可能是完全糟糕的方法。

第三个选项是编辑 tiny_mce\themes\advanced\editor_template_src.js 第 467 行:

c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {...}

但似乎 TinyMCE 开发人员认为,每个下拉菜单都必须有标题/标题

4

1 回答 1

0

已解决:在 MCE 初始化之前,我们必须覆盖菜单渲染功能

(function(tinymce) {
var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, undef;

tinymce.create('tinymce.ui.ListBoxNoTitle:tinymce.ui.ListBox', {
    renderMenu : function() {
        var t = this, m;

        m = t.settings.control_manager.createDropMenu(t.id + '_menu', {
            menu_line : 1,
            'class' : t.classPrefix + 'Menu mceNoIcons',
            max_width : 250,
            max_height : 150
        });

        m.onHideMenu.add(function() {
            t.hideMenu();
            t.focus();
        });

/*          m.add({
            title : t.settings.title,
            'class' : 'mceMenuItemTitle',
            onclick : function() {
                if (t.settings.onselect('') !== false)
                    t.select(''); // Must be runned after
            }
        });
*/
        each(t.items, function(o) {
            // No value then treat it as a title
            if (o.value === undef) {
                m.add({
                    title : o.title,
                    role : "option",
                    'class' : 'mceMenuItemTitle',
                    onclick : function() {
                        if (t.settings.onselect('') !== false)
                            t.select(''); // Must be runned after
                    }
                });
            } else {
                o.id = DOM.uniqueId();
                o.role= "option";
                o.onclick = function() {
                    if (t.settings.onselect(o.value) !== false)
                        t.select(o.value); // Must be runned after
                };

                m.add(o);
            }
        });

        t.onRenderMenu.dispatch(t, m);
        t.menu = m;
        }
    });
})(tinymce);

有了这个关于“m.add”的评论,你只需要添加

tinyMCE.init({
        setup : function(ed) {
            ed.onBeforeRenderUI.add(function(ed){
        ed.controlManager.setControlType('listbox', tinymce.ui.ListBoxNoTitle);
            });
        }

});

此设置为 tinyMCE 的标准初始化。因此,它可以在不编辑源文件的情况下完成。

于 2012-05-22T09:47:29.127 回答