Пользовательский плагин CKEditor для вставки значения из выпадающего списка активной вкладки - PullRequest
2 голосов
/ 04 ноября 2011

У меня есть пользовательский плагин CKEditor, который я пытаюсь написать, но мне нужна помощь, чтобы выяснить, как вставить значение из выпадающего списка для «активной» вкладки.

У меня есть 4 вкладки, каждая имеет свой выпадающий список. Когда пользователь выбирает вкладку, затем выбирает значение в раскрывающемся списке и затем нажимает кнопку «ОК», я хочу, чтобы текущее значение раскрывающегося списка «Активная вкладка» было вставлено в документ.

Приведенный ниже код работает для этого, за исключением того, что мне нужно жестко закодировать вкладку, из которой я хочу получить информацию. Смотрите: abbr.setText( dialog.getValueOf( 'tab1', 'tenant_dropdown' ) ); события "onOk". Я хочу что-то более похожее на: abbr.setText( dialog.getValueOf( activeTab, activeElement ) ); или что-то вроде этого ... Я не могу найти документацию для этого ... я глуп?

Есть идеи, как мне это сделать? Спасибо за вашу помощь.

Вот мой код плагина:

CKEDITOR.plugins.add( 'rz_db',
{   
   requires : ['richcombo'], //, 'styles' ],
   init : function( editor )
   {
        editor.addCommand( 'abbrDialog', new CKEDITOR.dialogCommand( 'abbrDialog' ) );
        editor.ui.addButton( 'Rz Database Field',
                                    {
                                        label: 'Insert Rz Database Field',
                                        command: 'abbrDialog',
                                        icon: this.path + 'images/icon.png'
                                    } );
        CKEDITOR.dialog.add( 'abbrDialog', function ( editor )
        {
            var tenant_fields = []; //new Array();
            tenant_fields[0]=["First Name", "$RZ{tenant_first_name}"];
            tenant_fields[1]=["Last Name", "$RZ{tenant_first_name}"];
            tenant_fields[2]=["Address", "$RZ{tenant_address}"];

            return {
                title : 'Rz Database Fields',
                minWidth : 400,
                minHeight : 200,


                contents :
                [
                    {
                        id : 'tab1',
                        label : 'Tenants',
                        elements :
                        [
                            {
                                id : 'tenant_dropdown',
                                type : 'select',
                                label : 'Select the field you want, then press the "OK" button to insert it into the document.',
                                'default':'',
                                items: tenant_fields,
                                onChange : function( api ) {
                                  // this = CKEDITOR.ui.dialog.select
                                  alert( 'Current value: ' + this.getValue() );
                                }
                            }
                        ]
                    },
                    {
                        id : 'tab2',
                        label : 'Owners',
                        elements :
                        [
                            {
                                type : 'text',
                                id : 'id',
                                label : 'Id'
                            }
                        ]
                    },
                    {
                        id : 'tab3',
                        label : 'Vendors',
                        elements :
                        [
                            {
                                type : 'text',
                                id : 'id',
                                label : 'Id'
                            }
                        ]
                    },
                    {
                        id : 'tab4',
                        label : 'Other',
                        elements :
                        [
                            {
                                type : 'text',
                                id : 'id',
                                label : 'Id'
                            }
                        ]
                    }
                ],

                onOk : function()
                {
                    var dialog = this;
                    var abbr = editor.document.createElement( 'rz_db' );
                    abbr.setText( dialog.getValueOf( 'tab1', 'tenant_dropdown' ) );
                    editor.insertElement( abbr );
                }

            };
        } );
   }
});

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

не бери в голову ... Я нашел работу вокруг. Если я устанавливаю глобальную переменную, тогда присваиваю значение во время события «onchange» и использую глобальную переменную в событии «onOk», это дает мне то, что мне нужно.

0 голосов
/ 25 апреля 2016

У меня тот же случай, и я нашел следующее решение - этот метод getContentElement возвращает целые данные об элементе, после чего для получения значения поля можно использовать метод getValue ().

    var s = this.getDialog(),
        z = s.getContentElement('tab1', 'tenant_dropdown'),
        val = z.getValue(); // Get field value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...