我正在使用这个设置来允许访问jQuery插件之外的变量:
(function($){
$.fn.myplugin = function() {
return this.each(function() {
// plugin code here
console.log($.fn.myplugin.myvar);
});
};
$.fn.myplugin.myvar = { ... };
})(jQuery);
我可以使用myvar
访问插件内外的$.fn.myplugin.myvar
。但它非常冗长......我觉得必须有一种方法可以使用更短的名称来访问插件中的变量,例如this.myvar
。该示例不起作用,因为this
指的是当前元素。但是,还有另一种方法可以更简单地访问变量吗?
答案 0 :(得分:3)
$.fn
是jQuery的prototype
的别名,所以我认为没有更简单的方法,除非你将该插件保存在变量中。
答案 1 :(得分:1)
function MyPlugin(element) {
this.element = element;
}
MyPlugin.prototype.init = function() {
//plugin code here
}
MyPlugin.myVar = { ... };
$.fn.myplugin = function() {
return this.each(function() {
var instance = $(this).data('myplugin');
if (!instance) {
var instance = new MyPlugin(this);
$(this).data('myplugin', instance);
}
instance.init.apply(instance, arguments);
});
}
然后,如果您需要访问任何实例属性或方法,则可以通过$('#someElement').data('myplugin');
执行此操作。
您也可以通过让第一个参数为方法名称,然后是方法参数,使相同的方法可用,
就像jQuery UI如何工作......但实现起来会稍微复杂一些。如果你有兴趣,谷歌“jQuery小部件模式。”
答案 2 :(得分:0)
我认为在定义函数(demo)时分配变量会更容易:
var myplugin;
(function($){
myplugin = $.fn.myplugin = function() {
return this.each(function() {
// plugin code here
console.log(myplugin.myvar);
});
};
myplugin.myvar = { test: true };
})(jQuery);