我已经习惯了写像这样的插件:
;(function($){jQuery.fn.myPlugin=function(options){
var defaults={
'property':value
},
o=$.extend({},defaults,options||{});
// INSERT AND CACHE ELEMENTS
var $Element=$('<div></div>');
$Element.appendTo($('body'));
function funFunction(){
// I have access to $Element!
$Element.hide(500);
};
this.each(function(i){
var $this=$(this);
});
return this;
});};})(jQuery);
我知道这不是完美的,这就是为什么我现在想好好学学命名空间,更好的插件结构/模式。 在过去的几本书我读过不幸的是引用jQuery插件制作教程一个字一个字,所以都没有太大的帮助。 本教程似乎一切分裂和不显示相结合,这就是为什么我很困惑的一个很好的例子。 在该教程,它显示了命名空间的例子。
jQuery插件命名空间教程
(function( $ ){
var methods = {
init : function( options ) {
},
show : function( ) {
},
hide : function( ) {
},
update : function( content ) {
}
};
$.fn.tooltip = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
})( jQuery );
// calls the init method
$('div').tooltip();
我理解的结构以及如何访问命名空间中的对象,但它显示了默认设置/选项不包括任何命名空间的另一个例子。所以在努力写正确命名空间插件的开始,具有默认/选项和缓存HTML元素我插入了整个插件的使用,我想出了以下内容。
正确的组合?
;(function($,window,document,undefined){
var myPlugin={
// METHODS
init:function(options){
},
buildElements:function(){
var $Elements=$('<div id="myElem"></div>')
.appendTo($('body'));
}
};
$.fn.myPlugin=function(method,options){
var defaults={
},
options=$.extend({},defaults,options||{});
myPlugin.buildElements();
return this.each(function(){
var $this=$(this);
if(myPlugin[method]){
return myPlugin[method].apply(this,Array.prototype.slice.call(arguments,1));
}else if(typeof method==='object'||!method){
return myPlugin.init.apply(this,arguments);
}else{$.error('Method '+method+' does not exist on jQuery.myPlugin');};
});
};})(jQuery);
显然,当我建立/插入myElem也只会是可用的方法中,而不是任何其他人里面....我会建立它在错误的地方?
在默认/在正确的位置延伸?
如果我不从插件之外想接入方式,我需要的方法逻辑部分?
是否有使用.prototype VS .fn什么好处?
非常感谢任何人,每个人都! :)