Привязка событий jcarousel - синтаксис событий

0

Документация jcarousel указывает на возможное create события для объекта jcarousel, однако при привязке к нему используется следующее имя jcarousel:create. Что это за синтаксис?

Я понимаю, что имени события предшествует пространство имен, однако раньше я не встречал этот синтаксис. Синтаксис jQuery для пространств имен различен и использует точку в качестве разделителя между пространством имен и именем события.

Теги:
jcarousel

1 ответ

1
Лучший ответ

Это похоже на синтаксис jcarousel, который специально создан теми, кто написал jcarousel. Однако используемый синтаксис выглядит так, как будто он был создан как пространство имен, чтобы избежать конфликтов с другими плагинами.

В примере, используемом в документации для создания, указано, что все, что содержится в обработчике событий, будет выполняться при создании карусели.

Пример кода:

$('.jcarousel').on('jcarousel:create', function(event, carousel) {
    // "this" refers to the root element
    // "carousel" is the jCarousel instance
});

В jQuery можно создавать пользовательские события, это делается с помощью триггера и связывания. См. Пользовательские события в jQuery?

В документации jcarousel говорится, что "Некоторые события запускаются из конструктора, поэтому вам нужно привязываться к событиям перед инициализацией плагина".

В файле core.js jcarousel у него есть функция, называемая _trigger. Когда это называется, это вызывает определенные события. Обратите внимание, что в коде он создает объект события, используя $.Event() передающую имя события как (pluginName + ':' + type).toLowerCase() Это создает объект события с именем таких как jcarousel: create. Он использует созданный объект события для запуска этого имени события, которое вызывает соответствующий обработчик событий.

Вот код, вызываемый конструктором:

        _trigger: function(type, element, data) {
            var event,
                defaultPrevented = false;

            data = [this].concat(data || []);

            (element || this._element).each(function() {
                event = $.Event((pluginName + ':' + type).toLowerCase());

                $(this).trigger(event, data);

                if (event.isDefaultPrevented()) {
                    defaultPrevented = true;
                }
            });

            return !defaultPrevented;
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню