1

私はこのようなボイラープレート プラグイン デザインを使用しています。

;(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 で何かが発生し、最初 containerdivonSomethingのみに対して関数が呼び出されました。 container

もう少し明確にするために、thisインスタンスをonSomething関数に渡そうとしました。そのようにして、すべてのプラグインデータを公開し、次のようなことができます。

onSomething(instance){
   instance.someMethod();
   instance.init();
   //or anything i want
}

私にはそれはかなり間違っているように見えるので、もっと良い方法があるに違いありません...それともそうではありませんか?

4

1 に答える 1