現在、jquery ガイドラインに従って記述された 2 つのプラグインがあります: http://docs.jquery.com/Plugins/Authoring
あるプラグインから名前空間イベントを発生させ、別のプラグインでキャッチするベスト プラクティスの方法は何ですか? ここの jsfiddle で状況のカットダウン バージョンを設定しました: http://jsfiddle.net/cMfA7/ - HTML と Javascript は以下のとおりです。
HTML:
<div id="container">
<button id="click">Click Me!</button>
<div id="result"></div>
</div>
Javascript:
/* ===========================
Plugin that triggers event:
=========================== */
(function( $ ){
var methods = {
init : function( options ) {
return this.each(function(){
$("#click").bind('click.pluginTrigger', methods.trigger);
});
},
trigger : function( ) {
// TODO: Trigger to go here?
}
};
$.fn.pluginTrigger = function( method ) {
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 );
/* ===========================
Plugin that handles event:
=========================== */
(function( $ ){
var methods = {
init : function( options ) {
return this.each(function(){
// TODO: Binding on pluginTrigger event to go here (and call methods.result method below)?
});
},
result : function( ) {
$("#result").text("Received!");
}
};
$.fn.pluginBinder = function( method ) {
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 );
/* ===============
Initialisation
=============== */
$("#container").pluginTrigger();
$("#container").pluginBinder();