我正在使用一个看起来像这样的jquery插件:
(function($){
var options;
$.fn.main(opts){
options = opts;
//rest of code
}
$.fn.otherFunc(){
//does something with options
}
}(jQuery));
这里的问题是,如果我在页面上使用此插件5次,则选项变量会被覆盖,因此所有5个实例共享这些选项。这很糟糕,我希望每个插件实例都有自己的配置。
有没有非hackish jQuery方法来实现这个目标吗?
修改
我应该补充一点,我会在$ .fn.main中考虑$(this)的附加选项作为expando有点hackish,因为$ .fn.otherFunc可能不会从main函数调用$(this),所以我不能访问我的东西!
答案 0 :(得分:2)
如果你将相同的插件应用于这样的几个元素
$("#div1, #div2, #div3, #div4, #div5").main(opts);
你应该用不同的选项将它分成5个不同的选项 - 即:
var opts1 = {...};
$("#div1").main(opts1);
var opts2 = {...};
$("#div2").main(opts2);
// etc.
另外,在$.fn.otherFunc
添加一个paraemter,以接收应该处理的选项对象。
编辑:如果您未在otherFunc
内拨打main()
,则应考虑为何要在他们之间共享选项。在这种情况下,如果你发布了你原来的问题(即你试图解决的现实世界问题),我们可能会提供一个更好的解决方案,而不是让两个不同的插件共享选项,而不是将它们合并为一个。
答案 1 :(得分:1)
您的示例中给出的代码有语法错误,我猜这会更好用:
(function($){
var options;
$.fn.main = function(opts){
options = opts;
//rest of code
alert(options.text);
}
$.fn.otherFunc = function(){
//does something with options
}
})(jQuery);
$('a:first').main({text:'txt'});
$('a:last').main({text:'some other text'});
在你的代码中,我建议将选项数据添加到DOM元素本身以跟踪选项,毕竟,这就是“行为”所针对的位置,因此将其保留在那里是很自然的,而不是一个单独的对象。