Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.02.2013, 03:14
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Паттерн плагина jQuery
Здравствуйте. Разъясните пожалуйста часть конструкции для плагина.
Почти все разобрал что за что отвечает но не понятно концовка. Не могли бы вы объяснить работу строк отмеченных условными комментариями.
;(function($) {

	var defaults = {

	};

	function Nupoll(element, options) {  
		var widget = this;

		widget.config = $.extend({}, defaults, options); 
		widget.element = element;

		this.init();

	}

	Nupoll.prototype.init = function() {

	};

	$.fn.pluginNew = function(options) { 
		new Nupoll(this.first(), options); // ??????????

		return this.first();  // ??????????

	};
} (jQuery) );
Ответить с цитированием
  #2 (permalink)  
Старый 15.02.2013, 03:57
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

new Nupoll(this.first(), options);

Создается экземпляр Nupoll (вызывается конструктор Nupoll).

this.first() - первый элемент из коллекции.

return this.first() - возвращаем первый элемент, чтобы можно было продолжить цепочку вызовов: $(el).pluginNew().continueChain()

Если плагин должен обработать каждый элемент из коллекции, то обычно делают так:

$.fn.pluginNew = function(options) {
    return this.each(function(){
        // do stuff
    });
}
Ответить с цитированием
  #3 (permalink)  
Старый 15.02.2013, 04:22
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

То есть получается если у меня плагин должен подключатся не к одному к нескольким элементам я использую такой вариант паттерна:
;(function($) {

	var defaults = {

	};

	function Nupoll(element, options) {  
		var widget = this;

		widget.config = $.extend({}, defaults, options); 
		widget.element = element;

		this.init();

	}

	Nupoll.prototype.init = function() {


// код плагина


	};

$.fn.pluginNew = function(options) {
    return this.each(function(){
        // do stuff
    });

	};
} (jQuery) );
Ответить с цитированием
  #4 (permalink)  
Старый 15.02.2013, 04:32
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

prison47, изучите сначала основы JavaScript, потом уже учитесь делать плагины для jQuery.

<script src="//code.jquery.com/jquery-latest.min.js"></script>
<script>
    (function($) {
     
    $.fn.pluginNew = function(options) {
        return this.each(function(){
            $(this).css('color', 'red');
        });
     
    };
    
    } (jQuery) );
</script>

<div>Bla bla</div>
<div>Тест</div>
<script>
    $('div').pluginNew();
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 15.02.2013, 04:41
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Основы я как раз таки изучаю и вот такие конструкции не могу понять, в первом случае код плагина мы пишем в Nupoll.prototype.init = function() {
где уже есть доступ к дом элементу. Во втором случае приведенном вами почему-то все отсекается, тот же конструктор. Если у вас есть ссылки где можно подробнее почитать на доходчивом языке, буду признателен
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2013, 05:10
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Если вы не заметили, в моем "плагине" не используются какие-то собственные методы, опции и прочее.
this.each(fn) проходит по всем элементам коллекции и вызывает для каждого элемента функцию fn, устанавливая в качестве контекста этот элемент. Делайте с этим элементом что хотите. Я например просто изменил css свойство. Вы можете создавать какие-то объекты к примеру.

Сообщение от prison47
код плагина...
Это все и есть - код плагина. Разве нет?

Сообщение от prison47
где можно подробнее почитать
Посмотрите исходники каких-нибудь плагинов jQuery
Ответить с цитированием
  #7 (permalink)  
Старый 15.02.2013, 05:19
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Спасибо
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2013, 01:14
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Подскажите пожалуйста. В плагине вешаю обработчики клика через on() на ново появляющиеся элементы. Подключаю плагин к нужному элементу. Все работает. Но если нужно подключить плагин на еще один элемент например для срабатывания с другими параметрами, то обработчики клика начинают дублироваться. Если подключить на три элемента, то утраиваются. Что я неправильно делаю? Или многократное подключение плагина вообще не должно быть? Тогда как сделать срабатывание на нескольких элементах с разными параметрами?
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2013, 01:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

prison47,
обычно метку ставят если элемент обработан плагином то второй раз его ненадо -- если нужно по новой метку убирают навешивают по новой обработчики и ставят метку
Ответить с цитированием
  #10 (permalink)  
Старый 16.02.2013, 01:26
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

А подробней если можно? Не совсем понимаю
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хочу инвайт на хабр macdack Оффтопик 45 28.07.2013 23:18
Вопрос поддержки старых методов jQuery antonM jQuery 1 04.10.2012 00:08
Вызов подметода плагина jQuery antonM jQuery 5 25.06.2012 12:44
Внешняя ссылка на страницу которая находится в IFRAME Модального окна плагина jQuery Андррр jQuery 0 07.12.2011 15:13
Поиск плагина выводящего подсказки к ссылкам, jQuery. Flashton Элементы интерфейса 6 04.03.2010 20:47