wtw24
7/24/2018 - 7:48 AM

шаблон фабрики плагина jQuery UI (версий 1.8/9+)

шаблон фабрики плагина jQuery UI (версий 1.8/9+)

/*!
 * шаблон фабрики плагина jQuery UI (версий 1.8/9+)
 * автор: @addyosmani
 * дополнения: @peolanha
 * лицензия MIT
 */

;(function ( $, window, document, undefined ) {

    // можно определять неймспейс плагина, 
    // со своими параметрами, к примеру
    // $.widget( "namespace.widgetname", (optional)) - наследуемый
    // прототип виджета, и прототипирование нового виджета 

    $.widget( "namespace.widgetname" , {

        // Дифолтные значения
        options: {
            someValue: null
        },

        // Создание виджета
        // (создание элементов, назначение стилей, навешивание событий)
        _create: function () {

            // метод _create будет вызван автоматически
            // при первом вызове виджета.
            // здесь можно обращаться к элементу,
	    // на котором создается виджет, через this.element.
            // Свойства и методы доступны через
            // this.options и this.element.addStuff();
        },

        // деструктор плагина и
        // очистка изменений в DOM, сделанных плагином
        destroy: function () {

            // this.element.removeStuff();
            // для версий jQuery UI 1.8, нужно вызывать 
            // метод destroy базового виджета 
            $.Widget.prototype.destroy.call(this);
            // для версий UI 1.9 достаточно определить
            // метод _destroy, и можно не вызывать базовый деструктор
        },

        methodB: function ( event ) {
            // метод _trigger вызывает события
            // на которые можно подписываться
            // сигнатура: _trigger( "callbackName" , [eventObject],
            // [uiObject] )
            // например this._trigger( "hover", e /*where e.type ==
            // "mouseenter"*/, { hovered: $(e.target)});
            this._trigger('methodA', event, {
                key: value
            });
        },

        methodA: function ( event ) {
            this._trigger('dataChanged', event, {
                key: value
            });
        },

        // Метод переопределения свойств плагина
        _setOption: function ( key, value ) {
            switch (key) {
            case "someValue":
                //this.options.someValue = doSomethingWith( value );
                break;
            default:
                //this.options[ key ] = value;
                break;
            }

            // для версий UI 1.8 приходится
            // вызывать метод базового виджета
            $.Widget.prototype._setOption.apply( this, arguments );
            // для UI 1.9 достаточно вызвать метод _super
            // this._super( "_setOption", key, value );
        }
    });

})( jQuery, window, document );