0

おそらく、すでにこのように回答されている質問ですが、しばらく検索しても、このパターンに一致する決定的な回答が見つかりません。

したがって、最も基本的なレベルでは、私のプラグインは以下のようになります。要素がこれを通過した後にできることは、次のようなプラグインのメソッドへの短い参照を持つことができるようにすることだけです。

要素のプラグインを初期化:

$('#myElement').myPlugin({ options });

次に、メソッドにアクセスします。

$('#myElement').myPlugin('myFirstMethod', { params });

プラグインシェルは次のとおりです。

;(function($) {
    "use strict";
    var plugin = {};
    var defaults = {
        myDefault:        'some_value'
    };

    $.fn.myPlugin = function(options){        

        if(this.length > 1){
            this.each(function(){$(this).myPlugin(options);});
            return this;
        }

        var myplugin = {};
        var element = this;
        plugin.element = this;

        var init = function() {
            myplugin.settings = $.extend({}, defaults, options);
            // Other init stuff here
        };

        form.myFirstMethod = function(){
            // Do something
        };

        form.mySecondMethod = function(){
            // Do something else
        };

        init();
        return this; // returns the current jQuery object

    }

})(jQuery);

繰り返しますが、これはどこかで答えなければならないと確信しています。メソッドへの「最短」アクセスが必要なだけです。

ありがとう。

4

1 に答える 1

2

pluginName('method', 'params')個人的には、javascript が提供する完全なツールキットが得られないため、メソッドを呼び出すのは嫌いです。また、同じメソッドを 2 つの異なる目的で呼び出すのも好きではありません。あなたの場合、メソッド$().myPlugin()を初期化$().myPlugin("methodName")して実行したいと考えています。myPlugin()これは、2 つのまったく異なる目的のための 1 つの方法です。しかし、それがあなたのやりたいことなら、次のスニペットで十分だと思います。

// plugin
(function($) {
    var myplugin = function(elm) {
        this.elm = $(elm);
    };

    myplugin.prototype.myFirstMethod = function() { console.log("firstmethod"); }
    myplugin.prototype.mySecondMethod = function() { console.log("secondmethod"); }

    $.fn.myplugin = function() {
        var myArgs = arguments;
        return this.each(function() {
            if (!$(this).data("myplugin")) {
                $(this).data("myplugin", new myplugin(this));
            }

            var api = $(this).data("myplugin");

            if (myArgs.length > 0) {
                api[myArgs[0]](myArgs[1]);
            }
        });
    };
})(jQuery);

// init plugin
$(".foo").myplugin();

$(".foo").myplugin("myFirstMethod");

jquery コレクションのすべての要素に対してこのメ​​ソッドを実行する場合は、実行する必要があることに注意してくださいeach

それは動作しますか?

于 2013-06-20T20:56:50.453 に答える