Документация jcarousel указывает на возможное create
события для объекта jcarousel, однако при привязке к нему используется следующее имя jcarousel:create
. Что это за синтаксис?
Я понимаю, что имени события предшествует пространство имен, однако раньше я не встречал этот синтаксис. Синтаксис jQuery для пространств имен различен и использует точку в качестве разделителя между пространством имен и именем события.
Это похоже на синтаксис 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;
}