我知道,这已被多次询问,但不知何故,我找不到符合我需要的答案,所以就这样了。
我制作了一个看起来像这样的插件(剥离了):
(function(window, $){
var MyPlugin = function(elem, options){
this.elem = elem;
this.$elem = $(elem);
this.options = options;
this.metadata = this.$elem.data('popup-options');
this.markup = '<div>some markup here</div>';
this.popup = null;
};
MyPlugin.prototype = {
defaults:{
type: 'outer',
color: 'orange'
},
init: function(){
this.config = $.extend({}, this.defaults, this.options, this.metadata);
this.show();
return this;
},
show: function(){
// some stuff to show the element
},
hide: function(){
// some stuff to hide the element
},
someMethod: function(){
// some other stuff the plugin does
}
};
MyPlugin.defaults = MyPlugin.prototype.defaults;
$.fn.myPlugin = function(options){
return this.each(function(){
var thePlugin = new MyPlugin(this, options).init();
});
};
window.MyPlugin = MyPlugin;
}(window, jQuery));
现在我在代码中应用了这样的插件:
var thePlugin = $(this).myPlugin();
到目前为止,这都有效。
但是现在,我想从外部访问插件中的一个函数(例如«someMethod»)。
我试着称之为:
thePlugin.someMethod();
或
thePlugin.myPlugin.someMethod();
甚至
thePlugin.myPlugin[0].someMethod();
这一切都无效。
我如何制作插件,所以我可以在初始化后访问它? 这有可能吗?
答案 0 :(得分:0)
找到了解决方案。
我不得不像这样更改插件的return语句:
$.fn.updPopup = function(options){
return new UpdPopup(this, options).init();
};
这只返回插件的一个实例。
然后我可以像这样访问它:
thePlugin.someMethod();
问题仍然存在:我将如何使用原始的return语句访问它(显然我会返回一个对象数组)?