25.06.2012, 13:49
|
Аспирант
|
|
Регистрация: 27.08.2011
Сообщений: 50
|
|
Как сделать плагин jQuery в виде объекта?
Ну, название темы, может быть, сформулировано коряво. Но ниже подробности.
Принцип в голове таков: делается объект, к примеру:
var plugin = {
name: "plugin",
__init: function(){...},
foo: function(){...}
}
Потом этот объект становится частью jQuery (не знаю, как). Гуглеж дает только начальные принципы создания плагинов.
Вобщем смысл примерно таков: хочу объект сделать частью jQuery, чтобы без самого объекта его методы и свойства нельзя было вызывать.
$("...").plugin.__init(); // Нет ошибки
$("...").__init(); // Ошибка, метод не является частью jQuery.
Вот так. Если что-то не понятно (а с моим описанием, наверняка многое не понятно), спрашивайте - объясню
|
|
25.06.2012, 16:27
|
Профессор
|
|
Регистрация: 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 в 16:58.
|
|
25.06.2012, 16:34
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от SkaN
|
Ну, название темы, может быть, сформулировано коряво. Но ниже подробности.
Принцип в голове таков: делается объект, к примеру:
var plugin = {
name: "plugin",
__init: function(){...},
foo: function(){...}
}
Потом этот объект становится частью jQuery (не знаю, как). Гуглеж дает только начальные принципы создания плагинов.
Вобщем смысл примерно таков: хочу объект сделать частью jQuery, чтобы без самого объекта его методы и свойства нельзя было вызывать.
$("...").plugin.__init(); // Нет ошибки
$("...").__init(); // Ошибка, метод не является частью jQuery.
Вот так. Если что-то не понятно (а с моим описанием, наверняка многое не понятно), спрашивайте - объясню
|
если я правильно понял, то :
jQuery.fn.plugin = plugin;
|
|
25.06.2012, 17:14
|
Аспирант
|
|
Регистрация: 27.08.2011
Сообщений: 50
|
|
Сообщение от melky
|
если я правильно понял, то :
jQuery.fn.plugin = plugin;
|
а как тогда в плагине держать объект jQuery?
2 DjDiablo: спасибо большое, решение развернутое и понятное
|
|
25.06.2012, 18:29
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от SkaN
|
а как тогда в плагине держать объект jQuery
|
зачем? либо я чего-то не понял (всё-таки), либо Вы имели в виду сохранить ф-ю JQ в переменной. это проще простого. после присваивания обернуть код в замыкание (см пример кода выше)
|
|
26.06.2012, 10:37
|
Аспирант
|
|
Регистрация: 27.08.2011
Сообщений: 50
|
|
2 melky: нужно, чтобы в объекте хранился объект jQuery и потом передавался всем методам объекта. Как-то так...
|
|
27.06.2012, 15:11
|
|
Злюка-бобер
|
|
Регистрация: 21.03.2010
Сообщений: 438
|
|
Непонятно, чем вас не устраивает официальная документация по написанию плагинов для jQuery? Она довольно подробна. Если вы хотите писать плагин, то и пишите его по существующим правилам, не надо придумывать свои.
__________________
In WEB We Trust
У всех есть своя темная сторона...
|
|
27.06.2012, 17:15
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Цитата:
|
Непонятно, чем вас не устраивает официальная документация по написанию плагинов для jQuery? Она довольно подробна. Если вы хотите писать плагин, то и пишите его по существующим правилам, не надо придумывать свои.
|
Я скажу с точностью наоборот.
Придумывайте свои правила, делайте нестандартно, делайте оригинально, далайте быстрее других, делайте надёжнее других, делайте мощнее чем у других, не стойте на месте, работайте на опережение.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 27.06.2012 в 17:23.
|
|
27.06.2012, 17:24
|
|
Злюка-бобер
|
|
Регистрация: 21.03.2010
Сообщений: 438
|
|
Это можно сказать опытному человеку, т.к. он сделает хоть и по своему, но правильно и понятно для других. А вот начинающие в таком случае понаписывают такого, что захочется им оторвать жопу...
__________________
In WEB We Trust
У всех есть своя темная сторона...
|
|
27.06.2012, 19:15
|
что-то знаю
|
|
Регистрация: 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);
Хотя в вашем случае будет работать и так как у вас, так как вы не юзаете свойства отдельных элементов.
|
|
|
|