現在公開したいプライベート関数 (プラグイン スコープ内の 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を呼び出すことができるように、これをリファクタリングするにはどうすればよいですか? リファクタリングを減らすことを意味する場合は、この関数を呼び出す別のパブリック関数を作成することにオープンです。