ckeditor добавляет обработчик события к элементу диалога - PullRequest
6 голосов
/ 10 августа 2011

Я пишу пользовательский диалог / плагин для ckeditor. Я хочу знать, как я могу добавить eventlistener в поле выбора в диалоговом окне, чтобы предупредить, когда выбранное значение было изменено. Как я могу это сделать?

Я посмотрел на API и натолкнулся на некоторую полезную информацию, но она недостаточно детализирована. Я не могу установить связь между информацией API и тем, что я пытаюсь реализовать.

1 Ответ

15 голосов
/ 12 августа 2011

Выбранные элементы в диалоговых окнах автоматически инициируют событие изменения при их изменении.Вы можете добавить функцию onChange в определение для элемента select.Вот пример из API:

onChange : function( api ) {
  // this = CKEDITOR.ui.dialog.select
  alert( 'Current value: ' + this.getValue() );
}

На этих страницах есть примеры для создания определений, используемых диалогами и элементами пользовательского интерфейса: Класс CKEDITOR.dialog http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html

Класс CKEDITOR.dialog.definition http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.html

Класс CKEDITOR.dialog.definition.select http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.select.html


Если вы хотите прослушать изменение элемента select из другого местоположения, вы можете создать прослушиватель, который будет указывать на событие "dialogShow".Вот пример:

// Watch for the "dialogShow" event to be fired in the editor, 
// when it's fired, perform this function
editor.on( 'dialogShow', function( dialogShowEvent )
{
  // Get any data that was sent when the "fire" method fired the dialogShow event
  var dialogShowEventData = dialogShowEvent.data;

  // Get the dialog name from the array of data 
  // that was sent when the event was fired
  var currentDialogName = dialogShowEventData._.name;
  alert( currentDialogName );

  // Create a reference to a particular element (ELEMENT-ID)
  // located on a particular tab (TAB-ID) of the dialog that was shown.
  var selectorObj = dialogShowEventData._.contents.TAB-ID.ELEMENT-ID;

  // Watch for the "change" event to be fired for the element you 
  // created a reference to (a select element in this case).
  selectorObj.on( 'change', function( changeEvent )
  {
    alert("selectorObj Changed");
  });
});

Вы можете проверить, является ли диалог, с которым вы хотите работать, тем, который вызвал событие "dialogShow".Если это так, вы можете создать объект для интересующего вас элемента select и прослушать событие «change».

Примечание: заполнители TAB-ID и ELEMENT-ID, которые я использовал, не относятся кИдентификационный атрибут элемента.Идентификатор относится к идентификатору, назначенному в файле определения диалога.Атрибут Id для различных элементов различается при каждой загрузке диалога.

На этой странице есть некоторая информация о событиях: Класс CKEDITOR.event http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.event.html

Будь здоров, Джо


Ответы на дополнительные вопросы, заданные в комментариях:

Q1) Ваше мероприятие здесь 'dialogShow«Какие другие события разрешены?то есть они предопределены или определены пользователем?

A1) Событие dialogShow предопределено.Вы можете посмотреть файл, содержащий код диалогов в вашем каталоге установки CKEditor или на веб-сайте:CKEditor \ _source \ Plugins \ Диалог \ plugin.jshttp://docs.cksource.com/ckeditor_api/symbols/src/plugins_dialog_plugin.js.html

Если вы ищете в файле «огонь», вы увидите все события, которые запускаются для диалогов.Конец файла содержит определения для различных событий.

Вы также можете определить свои собственные события для включения, используя метод "fire" в вашем диалоговом коде:

this.fire( 'yourEventNameHere', { yourPropertyOne : "propertyOneValue", yourPropertyTwo : "propertyTwoValue" } );

Тогдаследите за этим:

editor.on( 'yourEventNameHere', function( eventProperties )
{
  var propOne = eventProperties.data.yourPropertyOne; // propOne = "propertyOneValue"
  var propTwo = eventProperties.data.yourPropertyTwo; // propTwo = "propertyTwoValue"
  Do something here...
});

Q2) Можете ли вы объяснить синтаксис dialogShowEventData._.name?Я видел это раньше, но я не знаю значение, что-то делать с закрытыми переменными?

A2) Для всех, кто интересуется "._."синтаксис, используемый в коде CKEditor, он используется для уменьшения размера кода и заменяет «.private».Смотрите это сообщение @AlfonsoML на форуме CKEditor:http://cksource.com/forums/viewtopic.php?t=22982


Q3) Где я могу получить дополнительную информацию о TAB-ID.ELEMENT-ID?

A3) Tab-ID - это идентификатор, который вы назначаете для определенной вкладки (панели) диалога.(см. ниже: id: 'tab1',)Element-ID - это идентификатор, который вы назначаете определенному элементу, содержащемуся на вкладке в вашем диалоге.(см. ниже: id: 'textareaId',)Посмотрите на эту страницу: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.html#.add
Он показывает, как вы определяете вкладки и элементы, содержащиеся в диалоговом окне (я добавил пример элемента select, который запускает пользовательское событие):

var dialogDefinition =

contents : [
        {
          id : 'tab1',
          label : 'Label',
          title : 'Title',
          expand : true,
          padding : 0,
          elements :
          [
            {
              type : 'html',
              html : '<p>This is some sample HTML content.</p>'
            },
            {
              type : 'textarea',
              id : 'textareaId',
              rows : 4,
              cols : 40
            },
            // Here's an example of a select element:
            {
              type : 'select',
              id : 'sport',
              label : 'Select your favourite sport',
              items : [ [ 'Basketball' ], [ 'Baseball' ], [ 'Hockey' ], [ 'Football' ] ],
              'default' : 'Football',
              onChange : function( api ) {
                // this = CKEDITOR.ui.dialog.select
                alert( 'Current value: ' + this.getValue() );

                // CKEditor automatically fires a "change" event here, but
                // here's an example of firing your own event
                this.fire( 'sportSelector', { sportSelectorPropertyOne : "propertyOneInfo" } );
              }
          ]
        }
      ],

Q4) Не могли бы вы кратко объяснить, что делает приведенный выше код?

A4) См. Оригинальный код, я добавил комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...