我希望这个问题不太具体。目前,我正在尝试为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(选项变量)可用。但我离题了。 ...
答案 0 :(得分:1)
如果您想知道自己是否遵循最佳做法,我会从创作插件的jQuery's own documentation开始。他们提供了很容易理解的例子。
答案 1 :(得分:0)
我认为你只需要使用最适合你试图制作的插件的技巧。您给出的示例看起来就像一个好的模板。
如果您在访问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!
}
}