0

現在公開したいプライベート関数 (プラグイン スコープ内の var に割り当てられている) を持つ既存の jQuery プラグインを変更しているので、任意の時点で (UI イベントに応答して) プラグインの外部から呼び出すことができます。 、 例えば)。

基本的に、私は次のように動作することを望みます:

$('.foo').myPlugin();

... 以降 (おそらくイベント コールバック内):

$('.foo').publicMethodInsidePlugin();

あるいは:

$('.foo').myPlugin.publicMethodInsidePlugin();

jQueryUI には別のアプローチがあることは理解していますが、それを避けてシンプルに保ちたいと考えていました。

アップデート

このプラグインの課題であると私が信じる理由は、私が呼び出そうとしている「プライベート」関数がreturn this.each(function(){})プラグインの一部内で定義されているためです。この関数を引き出すのは非常に困難です。なぜなら、それ自体がthis.eachブロックのスコープ内でプライベート変数として定義されている多くの変数に依存しているためです。おそらく、関数が適用されている要素ごとに値が異なる可能性があるためです。適用。

基本構造

上記プラグインの基本構造は次のとおりです。

(function( $ ){
    $.fn.myPlugin = function(options) {
        var settings = { "variousDefaults" : true }

        return this.each(function(){
            if(options) {
                    $.extend(settings, options);
            };

            var $this               = $(this),
                someOtherVars       = $("span", $this).length; // needs to evaluate on $this

            privateFunc = function privateFunc() {
              // the function that I want to be able to call after the fact...
            };

            // Immediately call that function
            privateFunc();

            $(window).resize(function() {
                privateFunc();
            });
         });
    }
})(jQuery);

事後にprivateFuncを呼び出すことができるように、これをリファクタリングするにはどうすればよいですか? リファクタリングを減らすことを意味する場合は、この関数を呼び出す別のパブリック関数を作成することにオープンです。

4

1 に答える 1

1

「jQuery」の方法は、プラグイン コンストラクターを使用して、ある種の API などのさまざまなメソッドを呼び出すことです。

$('.foo').myPlugin();
$('.foo').myPlugin('someMethod', ['arg1', 'arg2']);

私が見た別の方法は、API をオブジェクトのデータ ストアに格納することです。

$('.foo').myPlugin();
$('.foo').data('myPluginAPI').someMethod('arg1', 'arg2');
于 2013-03-06T20:23:59.953 に答える