#jquery #jquery-plugins
#jquery #jquery-плагины
Вопрос:
Я надеюсь, что вопрос не слишком неспецифичен. На данный момент я пытаюсь написать плагин для jQuery, но я борюсь с различными способами его структурирования. Я нашел bxSlider и подумал, что это довольно доступно для кода плагина. Вот простой пример:
(function($){
$.fn.letSlider = function(options){
var defaults = {
speed: 500,
onBeforeSlide: function(){} //Callback
}
var options = $.extend(defaults, options);
//cache base element
base = this;
//public functions
this.init = function(){
text = giveText();
alert(text ' ' options.speed);
};
//private functions
function giveText(){
return 'blubb';
};
this.each(function(){
// make sure the element has children
if($(this).children().length > 0){
base.init();
}
});
return this;
}
})(jQuery);
Таким образом, он имеет четкую структуру, которую мне удается понять. Тем не менее, это выглядит совсем не так, как все структуры плагинов, которые я видел рекомендованными до сих пор, поэтому я не уверен, не вызовет ли это у меня проблем позже. Тем не менее, он делает в основном все, что мне нужно: открытые параметры, обратные вызовы, частные и общедоступные функции. И с этим.каждый из них тоже должен быть цепным. Одна вещь, которую я уже заметил, это то, что в основном все находится в начальной $.fn.bxSlider = function(options){ … и я никогда не видел этого раньше.
Что касается других структур плагинов, они либо слишком сложны для понимания (позор мне), либо я не могу их реализовать. Например, с http://www.learningjquery.com/2007/10/a-plugin-development-pattern Мне не удалось сделать opts (переменную options) доступной в частных или общедоступных функциях. Но я отвлекся. …
Ответ №1:
Если вы хотите знать, следуете ли вы лучшим практикам, я бы начал с собственной документации jQuery по разработке плагинов. Они предоставили довольно простые для понимания примеры.
Комментарии:
1. Спасибо, хотя я прочитал это и подумал, что это слишком сложно. В принципе, я хотел получить обоснованное предположение о возможностях вышеупомянутой структуры по сравнению рекомендация jQuery.
Ответ №2:
Я думаю, вам просто нужно использовать любые методы, которые наилучшим образом подходят для плагина, который вы пытаетесь создать. Приведенный вами пример выглядит как хороший шаблон для начала.
Если у вас возникли проблемы с доступом opts
, это потому, что это частная переменная внутри функции $.fn.hilight. Поэтому, естественно, методы, определенные за пределами одной области, не могут получить к нему доступ.
В приведенном вами примере options
также является частной переменной, но методы, определенные ниже, находятся в той же области, поэтому им предоставляется доступ.
Пример 1:
foo = function () {
var secret = "foo";
}
foo.bar = function() {
alert(secret); // NOT OK!
}
Пример 2:
foo = function() {
var secret = "foo";
this.bar = function() {
alert(secret); // OK!
}
}
Комментарии:
1. Ах, спасибо, я был слишком смущен, чтобы увидеть область вчера. На самом деле, структура, которую я имею в первом примере, делает именно то, что вы имеете в виду.