我正在修改一个现有的 jQuery 插件,该插件当前具有我想公开的私有函数(分配给插件范围内的 var),因此我可以在任意时间从插件外部调用它(以响应 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?我愿意创建另一个公共函数,然后调用这个函数,如果这意味着更少的重构。