私はこのようなボイラープレート プラグイン デザインを使用しています。
;(function ( $, window, document, undefined ) {
var pluginName = "test",
defaults = {};
function test( element, options ) {
this.init();
}
test.prototype = {
init: function() {}
}
$.fn.test = function(opt) {
// slice arguments to leave only arguments after function name
var args = Array.prototype.slice.call(arguments, 1);
return this.each(function() {
var item = $(this), instance = item.data('test');
if(!instance) {
// create plugin instance and save it in data
item.data('test', new test(this, opt));
} else {
// if instance already created call method
if(typeof opt === 'string') {
instance[opt].apply(instance, args);
}
}
});
};
})( jQuery, window, document );
<div>
今、同じクラスの2つがあるとしましょうcontainer
。
そして今、私はtest
これらの div で自分のプラグインを次のように呼び出します。
$(".container").test({
onSomething: function(){
}
});
関数がプラグイン内から呼び出された場合、インスタンス関数が呼び出されonSomething
たプラグインのパブリック メソッドをどのように呼び出すことができますか?onSomething
たとえば、最初の div で何かが発生し、最初の container
divonSomething
のみに対して関数が呼び出されました。 container
もう少し明確にするために、this
インスタンスをonSomething
関数に渡そうとしました。そのようにして、すべてのプラグインデータを公開し、次のようなことができます。
onSomething(instance){
instance.someMethod();
instance.init();
//or anything i want
}
私にはそれはかなり間違っているように見えるので、もっと良い方法があるに違いありません...それともそうではありませんか?