如何动态创建自定义控件

时间:2012-02-15 22:46:58

标签: tinymce

我正在尝试添加自定义的mymenubutton,菜单的项目基于另一个下拉列表的选定值,该值返回带有束项的json数组。

所以我使用了第一次创建mymenubutton的示例http://fiddle.tinymce.com/gaaaab,但是当下拉列表发生变化时,我应该如何重新启动此控件并将json数组重新绑定到mymenubutton?

    function generateTokensList(result) {
        tinymce.create('tinymce.plugins.ExamplePlugin', {
            createControl: function (n, cm) {
                switch (n) {
                    case 'mysplitbutton':
                        var c = cm.createSplitButton('mysplitbutton', {
                            title: 'My split button',
                            image: 'some.gif',
                            onclick: function () {
                                alert('Button was clicked.');
                            }
                        });

                        c.onRenderMenu.add(function (c, m) {
                            m.add({ title: 'Tokens', 'class': 'mceMenuItemTitle' }).setDisabled(1);

                            var insertVar = function (val) {
                                return function () { tinyMCE.activeEditor.execCommand('mceInsertContent', false, val); }
                            };

                            for (var i = 0; i < result.length; i++) {
                                var field = result[i].field;
                                var variable = insertVar(result[i].field);
                                m.add({ title: result[i].name, onclick: variable });
                            }
                        });

                        // Return the new splitbutton instance
                        return c;
                }

                return null;
            }
        });

        tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);
    }

1 个答案:

答案 0 :(得分:3)

我自己解决了这个问题。将数据绑定到变量,每次只调用var。

                c.onRenderMenu.add(function (c, m) {
                    m.add({ title: 'Tokens', 'class': 'mceMenuItemTitle' }).setDisabled(1);
                    var insertVar = function (val) {
                        return function () { tinyMCE.activeEditor.execCommand('mceInsertContent', false, val); }
                    };
                    for (var i = 0; i < tokens.length; i++) {
                        var field = tokens[i].field;
                        var variable = insertVar( '[['+tokens[i].name+']]');
                        m.add({ title: '[['+tokens[i].name+']]', onclick: variable });
                    }
                });