Настройки JQuery с по умолчанию и несколько экземпляров - PullRequest
5 голосов
/ 27 мая 2011

Я сделал плагин jQuery, и он работает почти нормально.За исключением того, что когда у меня есть несколько экземпляров на одной странице, параметры / настройки последнего экземпляра используются для обоих.

Вот урезанная версия этого ... извините за длину.

(function() {

    var settings = {};
    var defaults = {
        duration : 1000,
        easingShow : 'easeOutBounce',
        easingHide : 'easeOutQuad'
    };

    var methods = {
        init : function(options) {

            return this.each(function(n) {

                settings = $.extend(defaults, options);

            });

        },

        show : function() {

            // settings used here
        },

        hide : function() {
            // also used here
        }
    };

    $.fn.expander = 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);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.expander');
        }

    };

})(jQuery);

Я уверен, что это какая-то проблема с пространством имен, поскольку я часто путаюсь с этим.

Спасибо

1 Ответ

6 голосов
/ 27 мая 2011

use

settings = $.extend(true, {}, defaults, options);

из jquery docs @ http://api.jquery.com/jQuery.extend/

deep     If true, the merge becomes recursive (aka. deep copy).
target   The object to extend. It will receive the new properties.
object1  An object containing additional properties to merge in.
objectN  Additional objects containing properties to merge in.

Имейте в виду, что целевой объект (первый аргумент) будет изменен, а такжебыть возвращенным из $ .extend ().Однако, если мы хотим сохранить оба исходных объекта, мы можем сделать это, передав пустой объект в качестве цели.

Чтобы иметь разные настройки для каждого элемента, вы можете сохранить их в каждом элементе.используя .data()

Посмотрите рабочую демонстрацию: http://jsfiddle.net/roberkules/XvKs8/

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