私はプラグインを次のように書くことに慣れています:
;(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 と .fn を使用する利点はありますか?
誰にでも、みんなに、どうもありがとう!:)