Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.06.2012, 12:49
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Как сделать плагин jQuery в виде объекта?
Ну, название темы, может быть, сформулировано коряво. Но ниже подробности.
Принцип в голове таков: делается объект, к примеру:
var plugin = {
    name: "plugin",
    __init: function(){...},
    foo: function(){...}
}

Потом этот объект становится частью jQuery (не знаю, как). Гуглеж дает только начальные принципы создания плагинов.
Вобщем смысл примерно таков: хочу объект сделать частью jQuery, чтобы без самого объекта его методы и свойства нельзя было вызывать.
$("...").plugin.__init(); // Нет ошибки
$("...").__init(); // Ошибка, метод не является частью jQuery.

Вот так. Если что-то не понятно (а с моим описанием, наверняка многое не понятно), спрашивайте - объясню
Ответить с цитированием
  #2 (permalink)  
Старый 25.06.2012, 15:27
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

(function($){
         var name="youPlug";
         $.fn[name]=function(options){
             //получим ссылку на контейнер
             var container=$(this);

             //если в контейнере это плагина нет, тогда создадим новый экземпляр

	          if (!container.data(name)){	
                    //создаём плагин
	          	    var f=function(){
                           //здесь вы можете разместить приватные функции и переменные

                          // return возвращает обьект с публичными свойствами
                          return {
                              // напишем какойнибудь демонстрационный код
                              msg:options.msg,
                              test:function(){
                                  alert(this.msg);
                              }
                          }
                     }
                     //сохраним плагин в data
                     container.data(name,f());		                
              }
              //если плагин есть, то возвращаем уже созданный экземпляр
              else {
		             return container.data(name);
              }
                     
          }
})(jQuery);

//эксперемент
$(function(){
   $("#test").youPlug({msg:"привет"}); //создаём плагин 
   $("#test").youPlug().test(); //вызываем метод плагина //alert("привет")
})
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 25.06.2012 в 15:58.
Ответить с цитированием
  #3 (permalink)  
Старый 25.06.2012, 15:34
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от SkaN Посмотреть сообщение
Ну, название темы, может быть, сформулировано коряво. Но ниже подробности.
Принцип в голове таков: делается объект, к примеру:
var plugin = {
    name: "plugin",
    __init: function(){...},
    foo: function(){...}
}

Потом этот объект становится частью jQuery (не знаю, как). Гуглеж дает только начальные принципы создания плагинов.
Вобщем смысл примерно таков: хочу объект сделать частью jQuery, чтобы без самого объекта его методы и свойства нельзя было вызывать.
$("...").plugin.__init(); // Нет ошибки
$("...").__init(); // Ошибка, метод не является частью jQuery.

Вот так. Если что-то не понятно (а с моим описанием, наверняка многое не понятно), спрашивайте - объясню
если я правильно понял, то :
jQuery.fn.plugin = plugin;
Ответить с цитированием
  #4 (permalink)  
Старый 25.06.2012, 16:14
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

Сообщение от melky Посмотреть сообщение
если я правильно понял, то :
jQuery.fn.plugin = plugin;
а как тогда в плагине держать объект jQuery?

2 DjDiablo: спасибо большое, решение развернутое и понятное
Ответить с цитированием
  #5 (permalink)  
Старый 25.06.2012, 17:29
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от SkaN Посмотреть сообщение
а как тогда в плагине держать объект jQuery
зачем? либо я чего-то не понял (всё-таки), либо Вы имели в виду сохранить ф-ю JQ в переменной. это проще простого. после присваивания обернуть код в замыкание (см пример кода выше)
Ответить с цитированием
  #6 (permalink)  
Старый 26.06.2012, 09:37
Аспирант
Отправить личное сообщение для SkaN Посмотреть профиль Найти все сообщения от SkaN
 
Регистрация: 27.08.2011
Сообщений: 50

2 melky: нужно, чтобы в объекте хранился объект jQuery и потом передавался всем методам объекта. Как-то так...
Ответить с цитированием
  #7 (permalink)  
Старый 27.06.2012, 14:11
Аватар для SkyLight
Злюка-бобер
Отправить личное сообщение для SkyLight Посмотреть профиль Найти все сообщения от SkyLight
 
Регистрация: 21.03.2010
Сообщений: 438

Непонятно, чем вас не устраивает официальная документация по написанию плагинов для jQuery? Она довольно подробна. Если вы хотите писать плагин, то и пишите его по существующим правилам, не надо придумывать свои.
__________________
In WEB We Trust
У всех есть своя темная сторона...
Ответить с цитированием
  #8 (permalink)  
Старый 27.06.2012, 16:15
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
Непонятно, чем вас не устраивает официальная документация по написанию плагинов для jQuery? Она довольно подробна. Если вы хотите писать плагин, то и пишите его по существующим правилам, не надо придумывать свои.
Я скажу с точностью наоборот.
Придумывайте свои правила, делайте нестандартно, делайте оригинально, далайте быстрее других, делайте надёжнее других, делайте мощнее чем у других, не стойте на месте, работайте на опережение.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 27.06.2012 в 16:23.
Ответить с цитированием
  #9 (permalink)  
Старый 27.06.2012, 16:24
Аватар для SkyLight
Злюка-бобер
Отправить личное сообщение для SkyLight Посмотреть профиль Найти все сообщения от SkyLight
 
Регистрация: 21.03.2010
Сообщений: 438

Это можно сказать опытному человеку, т.к. он сделает хоть и по своему, но правильно и понятно для других. А вот начинающие в таком случае понаписывают такого, что захочется им оторвать жопу...
__________________
In WEB We Trust
У всех есть своя темная сторона...
Ответить с цитированием
  #10 (permalink)  
Старый 27.06.2012, 18:15
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от DjDiablo Посмотреть сообщение
(function($){
         var name="youPlug";
         $.fn[name]=function(options){
             //получим ссылку на контейнер
             var container=$(this);
            // ...............
          }
})(jQuery);
Вообще обычно начинать плугин надо так:
(function($){
         var name="youPlug";
         $.fn[name]=function(options){

             return this.each(function() { // проходим по всем элементам
                 //получим ссылку на контейнер
                 var container=$(this);
                // ...............
             });

          }
})(jQuery);
Хотя в вашем случае будет работать и так как у вас, так как вы не юзаете свойства отдельных элементов.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плагин jQuery form. Добавляю форму js'ом Physicist jQuery 3 21.07.2011 16:46
Как сделать 2 галереи JQuery на одной странице? orendzi jQuery 8 16.07.2011 14:22
Как отлаживать события? Или как сделать трассировку вызовов функций? gennad Events/DOM/Window 1 18.08.2010 12:21
как сделать кнопки меню в виде веера? sever2k6 Элементы интерфейса 5 28.07.2010 23:46
Как сделать просмотр большой картинки? greatilya Элементы интерфейса 7 20.05.2010 12:44