Как при второй инициализации плагина передать только параметры?

Всем привет, при создании своего плагина, появилась проблема (
Суть плагина
У меня на странице много селектов, сначала для всех инициализировал плагин:
$(document).find("select").dropdown();
Но для определенных селектов мне нужно дописать определенные параметры для плагина:
$(document).find("select").dropdown({
   effect: "animation-random"
});


Но почему то это все игнориться (

Ссылка на стартовый паттерн для плагина

var pluginName = "defaultPluginName",
   defaults = {
      propertyName: "value" // тут находятся все параметры
   };


вот тут весь движ по созданию оберток и элементов
init: function() {},

а вот тут нужно что то поменять:
$.fn[pluginName] = function ( options ) {
   return this.each(function () {
      if (!$.data(this, "plugin_" + pluginName)) {
         $.data(this, "plugin_" + pluginName, new Plugin( this, options ));
      }
   });
};
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
BRAGA96
@BRAGA96
Это называется метод. Создайте метод set передайте в него селектор и параметры. В методе сложите переданные параметры и те что были и переинциализируйте плагин, то есть запустите init с новыми параметрами.
Вот вам шаблон-пример:
(function($, window, undefined) {
	'use strict';

	var plugin = {
		name: 'plugin',
		data: {
			setting: 'setting'
		}
	}, defaults = {
		color: 'red',
		background: 'black'
	};

	var methods = {
		init: function($this, setting, type) {
			var setting = function() {
				var params = $.extend({}, defaults, setting);
				$this.data(plugin.data.setting, params);
				return params;
			}();
			/* START */
			$this.css({
				color: setting.color,
				background: setting.background
			});
			/* END */
		},
		set: function(key, value) {
			var setting = $(this).data(plugin.data.setting);
			switch (typeof key) {
				case 'string':
					setting[key] = value;
					break;
				case 'object':
					setting = $.extend(true, {}, setting, key);
					break;
			}
			methods.init($(this), setting, 'update');
		},
		get: function(key) {
			var setting = $(this).data(plugin.data.setting);
			if (key) {
				return Object.getOwnPropertyDescriptor(setting, key).value;
			} else {
				return setting;
			}
		},
		destroy: function() {
			$(this).removeData(plugin.data.setting).fadeOut(200, function() {
				$(this).empty().show();
			});
		}
	};

	$.fn[plugin.name] = function(setting, key, value) {
		if (typeof setting === 'object' || !setting) {
			return $.each(this, function() {
				methods.init($(this), setting, 'init');
			});
		} else if (typeof setting === 'string') {
			switch(setting.toLowerCase()) {
				case 'set':
					return methods.set.call(this, key, value);
				case 'get':
					return methods.get.call(this, key);
				case 'destroy':
					return methods.destroy.call(this);
			}
		}
	};

})(jQuery, window);


Использование:
// Инициализация с параметрами по умолчанию
$('.block').plugin();
// или своими параметрами
$('.block').plugin({
	color: 'green',
	background: 'white'
});

// Метод SET, изменить параметры и переинциализировать плагин
$('.block').plugin('set', 'color', 'red');
// или передать объект новых параметров
$('.block').plugin('set', {
	color: 'yellow',
	background: 'black'
});

// Метод GET, получить параметры плагина
$('.block').plugin('get', 'color');
// или получить все параметры
$('.block').plugin('get');

// Метод DESTROY, отвязать плагин
$('.block').destory();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы