jQuery параметры плагина

209
31 января 2018, 15:42

Здравствуйте! Возникла проблема с плагином jQuery (самописка). Параметры, которые я записываю в переменную плагина при каждой новой инициализации перекрываются более новыми. В параметрах я храню селекторы для элементов. В моем случае, постоянно перезаписывается объект data (я имею несколько .fixed-block на странице). Сам вопрос: могу ли я хранить параметры для каждой отдельной инициализации плагина? Мне необходимо сохранять параметры для каждого проинициализированного блока.

(function($){ 
    jQuery.fn.fixedBlock = function(options){ 
        $.extend({ 
 
        },options); 
 
        var data = { 
            fixed: false, 
            original: null, 
            copy: null 
        }; 
 
        var init = function(){ 
            // 
        }; 
 
        var check = function() { 
            // 
        }; 
 
        var copyElement = function(jQueryElement) { 
            // 
        }; 
 
        var calcTopValue = function() { 
            // 
        }; 
 
        return this.each(init); 
    } 
}(jQuery)); 
 
$('.fixed-block').fixedBlock();

Answer 1

судя по коду параметры никуда не сохраняются, потому что extend объединяет все в целевой объект, а он у тебя даже не определен , соответственно, так как он у тебя нигде не определен, то он и превращается в мусор.

По поводу $.extend: Если задать два или более объекта, то результатом будет их объединение. В случае, если вы зададите только один объект, функция extend() добавит его содержимое в глобальный объект $ (jQuery). Таким образом можно расширять возможности библиотеки, добавляя свои функции в ее пространство имен. Это может быть полезно при написании плагинов.

Напомним, что в результате объединения объектов, первый из них будет изменен (он же будет возвращен в качестве результата выполнения функции extend()). Если нужно, чтобы ни один из заданных объектов не был изменен, то можно задать в качестве параметра target пустой объект:

var object = $.extend({}, object1, object2);

Eсли сохранять все аргументы в сам объект jquery, то он быстро превратится в мусорку данных, и потом дебажить код будет почти невозможно.

READ ALSO
Как отловить event в Lightbox Uikit?

Как отловить event в Lightbox Uikit?

Здравствуйте! Есть компонент lightbox в фреймворке Uikit, https://getuikitcom/docs/lightbox не совсем понятно как слушать события( Нужно при показе/перелистывание...

223
Скрипт работает неправильно при вызове from(arguments)

Скрипт работает неправильно при вызове from(arguments)

Добрый день, столкнулся с проблемой написал небольшой скрипт для проверки элементов массивов (проверка чтобы все жлементы первого массива...

222
Циклические операции на jquery

Циклические операции на jquery

Есть кнопкиКак узнать,то это кнопка? В классе присутствует "knopka"

217
zofe/rapyd-laravel/

zofe/rapyd-laravel/

Пытаюсь использовать datagrid от linkНе могу разобраться, как подключать js скрипт непосредственно к элементу таблицы

226