Попробовал написать свой плагин. Нашёл кучу ссылок, но в основном это перевод одной и той же статьи, например вот это:
Как написать плагин на jQuery.
Написал, как рекомендовано. А именно, загнал все методы плагина в объект methods, в том числе и метод init.
И столкнулся с такой проблемой: после инициализации плагина мне необходимо сгенерить событие initialized. Самое подходящее место для этого - перед завершением метода init. Но почему-то триггер не срабатывает в методе init.
Вот код:
(function ($) {
var defaults = {
// настройки по умолчанию для всех копий плаина
var methods = {
init: function (options) {
// актуальные настройки, будут индивидуальными при каждом запуске
settings = $.extend({}, defaults, options); // settings - локальная, т.к. для каждого экземпляра должны быть свои настройки
/*
настройка
*/
alert($(this).attr('id')); // возвращает id объекта, к которому цепляется плагин
$(this).trigger('carousel.load'); // метод, привязанный через bind, не вызывается.
return this;
},
/*
другие методы
*/
};
// единственная публичная функция плагина
function doSlide(dir) {
/*
некоторые действия
*/
alert($(this).attr('id')); // возвращает пустую строку
$(this).trigger('carousel.drawComplete'); // нормально генерится событие
return this;
}
// главная функция плагина
$.fn.carousel = function(method) {
settings = null;
// обеспечиваем внешний вызов методов плагина
// логика вызова метода
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Метод с именем ' + method + ' не существует для jQuery.carousel');
}
return this;
};
})(jQuery);
В чём может быть дело? Как сгенерить событие из метода, входящего в свойство methods?