Плагин jQuery - как / где хранить данные и как делиться между методами? - PullRequest
2 голосов
/ 06 октября 2011

Учитывая такую ​​структуру:

(function($) {

    var defaults = {
        dragDelay:    200, // tap/hold this long to activate dragging
        feedback:     'glow', // feedback to show drag mode (glow/pulsate)
        glowColor:    '#fff' // color of the glow if feedback==glow
    };

    var methods = {
        init:   function(options) {
            return this.each(function() {
                options = $.extend({}, defaults, options);
                var $this = $(this);

                $this.bind('click', methods.doSomething);
            });
        },

        doSomething:    function(e) {
            //...
        }
    };

    $.fn.myPlug = function(method) {
        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.length > 0 ? arguments : [defaults]);
        else
            $.error("TypeError: Plugin 'myPlug' has no method '" + method +
                    "'");
    }
})(jQuery);

Желательно ли использовать $(this).data() для хранения данных или this.someVar = x?Кроме того, как я могу получить метод init () для совместного использования 'параметров' с остальными методами?

1 Ответ

0 голосов
/ 06 октября 2011

Если вы создаете какой-то визуальный виджет, то вы можете создать собственный виджет jQuery UI (у него есть хорошая техника): http://docs.jquery.com/UI_Developer_Guide

Но если нет - тогда лучше использовать $(this).data(...) для хранения личных данных некоторых объектов.

Как получить свой init() метод? Вы также можете хранить его методом .data().

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