3

私のページには textarea (CKEDITOR) と select field のあるフォームがあります<select id="_photogalleries" multiple="multiple"></select>。RichCombo のオプションは、 select with id で選択されたオプションに依存するようにしたいと思います#_photogalleries。RichCombo を動的に再生成する方法はありますか? 前もって感謝します。

CKEDITOR.plugins.add('style_plugin', {
        requires: ['richcombo'],
        init: function(editor) {
            var pluginName = 'style_plugin';
            var config = editor.config,
                lang = editor.lang.format;

            editor.ui.addRichCombo('photogalleries', {
                label: "Фоторепортаж",
                title: "Фоторепортаж",
                voiceLabel: "Фоторепортаж",
                className: 'cke_format',
                multiSelect: false,
                icon: CKEDITOR.plugins.getPath('style_plugin') + 'photo-list-horizontal.png',

                panel: {
                    css: [config.contentsCss, CKEDITOR.getUrl(editor.skinPath + 'editor.css')],
                    voiceLabel: lang.panelVoiceLabel
                },

                init: function () {
                    this.startGroup("Фоторепортаж");
                    var list=this;
                    $("#_photogalleries option:selected").each(function(index, value){
                        console.log(index, value);
                        list.add("#HORIZONTAL_GALLERY_"+ $(value).val()+"#", "(Г) " + $(value).text(), "(Г) " + $(value).text());
                        list.add("#VERTICAL_GALLERY_"+ $(value).val()+"#",   "(В) " + $(value).text(), "(В) " + $(value).text());
                    });
                },

                onClick: function (value) {
                    editor.focus();
                    editor.fire('saveSnapshot');
                    editor.insertHtml(value);
                    editor.fire('saveSnapshot');
                }
            });
        }
});
4

3 に答える 3

5

これは私にとってはうまくいき、グローバル変数を保持する必要はありません。

    CKEDITOR.plugins.add('systemdata', {
        init: function (editor) {

            var fnData = editor.config.fnData;

            if (!fnData || typeof (fnData) != 'function')
                throw "You must provide a function to retrieve the list data.";

            editor.ui.addRichCombo('systemDataCmb',
                {
                    allowedContent: 'abbr[title]',
                    label: "System Data",
                    title: "System Data",
                    multiSelect: false,
                    init: function () {

                        var self = this;

                        var content = fnData();

                        $.each(content, function(index, value) {
                            // value, html, text
                            self.add(value.name, value.name, value.name)
                        });
                    }
}

次に、データを取得する関数を設定するには、これを ckeditor をセットアップする場所に配置します

 CKEDITOR.replaceAll(function(element, config) {
                            config.startupFocus = true;
                            config.fnData = function() {

                                var returnData = null;

                                $.ajax({
                                    url: "/GetData",
                                    async: false,
                                    data: { id: 1 },
                                }).done(function(result) { returnData= result; });

                                return returnData;
                            };
                        });

簡単に変更できる value プロパティを持つ項目の配列を持つ json 応答を返すことを前提としています。

于 2013-05-15T03:27:19.430 に答える
0

自分に合った解決策を見つけたと思います。これは、リスト オブジェクトをグローバル変数に保持し、外部選択で onchange イベントが発生したときにそれを変更することでした。

于 2012-12-21T15:29:50.773 に答える
0

この問題を 1 行で解決しました。

YOURCOMBO.createPanel(editor);

例えば:

var comboTeam = editor.ui.get("team"); 

comboTeam.createPanel(editor);//This is important, if not, doesnt works

コンボにアイテムを追加できるようになりました

comboTeam.add("name","name","name");

comboTeam.add("name2","name2","name2");

comboTeam.add("name3","name3","name3");
于 2016-10-05T12:47:59.397 に答える