Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Что делать с options (https://javascript.ru/forum/jquery/63469-chto-delat-s-options.html)

maxapet 09.06.2016 11:09

Что делать с options
 
Есть вот такой плагин для выбора цвета:ра цвета:
(function ($){
	var defaults = {colors: new Array ("#000000", "#808080", "#8B0000", "#FF0000", "#FFA500", "#FFFF00", "#008000", "#87CEEB", "#0000FF", "#FF00FF",
		"#FFFFFF", "#C0C0C0", "#A52A2A", "#FFC0CB", "#FFD700", "#EEE8AA", "#00FF00", "#ADD8E6", "#000080", "#DDA0DD"),
		selectedColorIdx: 0,
		click: function (color) {}
	};
	var methods = {
		init: function(options) {
			return this.each(function(){
v				var settings = $.extend({}, defaults, options);
				var lineCnt = 2;
				var cellsInLine = settings.colors.length / lineCnt;

				var tbl = $("<table class='color-picker-tbl'/>");
				for(l=0; l < lineCnt; l++){
					var tr = $("<tr />");
					tr.appendTo(tbl);
					for(c=0; c < cellsInLine; c++){
						var td = $("<td style='background-color: " + settings.colors[l * cellsInLine + c] + ";' class='color-picker-mask'></td>").appendTo(tr);
					}
				}

				$(this).append(tbl);
				var $cells = $(this).find(".color-picker-tbl td");
				$cells.each(function(i) {
					$(this).click(function() {
						if (i != settings.selectedColorIdx){
							$cells.eq(settings.selectedColorIdx).removeClass("selected").removeClass("selected-color-mask-1").removeClass("selected-color-mask-2");
							$(this).addClass("selected").addClass(isDark(settings.colors[i]) ? "selected-color-mask-1" : "selected-color-mask-2");
							settings.selectedColorIdx = i;
						}
						settings.click(settings.colors[i]);
					});
				});
			});
		},
		setColor: function(color) {
			if (color[0] != "#")
				color = "#" + color;
			this.find(".color-picker-tbl td").each(function(i) {
				alert($(this).css("background-color"));
				if ($(this).css("color") == color) {
					$(this).trigger("click");
				}
			});
		}
	}
    $.fn.colorPicker = function(method){
		var settings;
		// немного магии
		if ( methods[method] ) {
			// если запрашиваемый метод существует, мы его вызываем
			// все параметры, кроме имени метода прийдут в метод
			// this так же перекочует в метод
			return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
			// если первым параметром идет объект, либо совсем пусто
			// выполняем метод init
			return methods.init.apply( this, arguments );
		} else {
			// если ничего не получилось
			$.error( 'Метод "' +  method + '" не найден в плагине jQuery.mySimplePlugin' );
		}
   }
    $cells.eq(settings.selectedColorIdx).trigger("click");
    return this.each(colorPicker);
})(jQuery);

/**
 * Return true if color is dark, false otherwise.
 * (C) 2008 Syronex / J.M. Rosengard
 **/
function isDark(color){
    var colr = parseInt(color.substr(1), 16);
    return (colr >>> 16) // R
    + ((colr >>> 8) & 0x00ff) // G 
    + (colr & 0x0000ff) // B
    < 500;
}


Если settings объявить в самом внешней области, то он становится общим для всех экземпляров, а если объявлять его так, как это написано, то он недоступен в методе setColor.

Как сделать так, чтобы settings был свой для каждого экземпляра?

рони 09.06.2016 12:38

maxapet,
откуда возникла строка 65 и что за мусор в строке 10? и лучше полный макет.

maxapet 09.06.2016 13:24

Это и есть полный макет. :)
В строке 10, действительно, мусор, mea culpa.
В строке 65 - настройка значения по умолчанию.

рони 09.06.2016 13:28

Цитата:

Сообщение от maxapet
Это и есть полный макет

Цитата:

Сообщение от maxapet
В строке 65 - настройка значения по умолчанию.

тогда я испанский лётчик и помочь не могу.

maxapet 09.06.2016 13:36

А как это всё связано с настройками? И что конкретно непонятно?

maxapet 09.06.2016 13:41

65 строка осталась от версии без методов.

рони 09.06.2016 13:50

Цитата:

Сообщение от maxapet
65 строка осталась от версии без методов.

переменная $cells видна только в методе init

рони 09.06.2016 13:51

Цитата:

Сообщение от maxapet
А как это всё связано с настройками? И что конкретно непонятно?

а всё непонятно, нет описания, нет примера использования.

maxapet 09.06.2016 14:06

Ну, а в общих словах, можете сказать, как сделать так, чтобы настройки были индивидуальны для каждого экземпляра?

рони 09.06.2016 14:29

maxapet,
они и так должны быть индивидуальными, строка 10 создаёт обьект настроек для каждого элемента индивидуально


Часовой пояс GMT +3, время: 01:04.