【发布时间】:2010-01-29 15:37:18
【问题描述】:
我创建了一个 jQuery 插件,除了能够在不同的对象上调用插件并且每个对象都保留它所提供的选项外,它的效果很好。问题是如果我在一个对象上调用插件,说:
$('#myDiv1').myPlugin({
option1: 'some text',
option2: true,
option3: 'another option value'
});
然后在另一个对象上再次调用插件,例如:
$('#myDiv2').myPlugin({
option1: 'different text',
option2: false,
option3: 'value for myDiv2'
});
然后,如果我返回并尝试使用 #myDiv1 做一些需要其原始选项保持不变的事情,即:
$('#myDiv1').myPlugin.update();
它没有原来的选项,但它们会被#myDiv2 的选项覆盖。这样做的正确方法是什么,以便每个对象都保留给它的原始选项? (这是我在插件中所做的一些示例代码)
(function($) {
$.fn.myPlugin = function(options) {
// build main options before element iteration
var opts = $.extend({}, $.fn.myPlugin.defaults, options);
_option1 = opts.option1;
_option2 = opts.option2;
_option3 = opts.option3;
// iterate all matched elements
return this.each(function() {
callPluginFunctions( this, opts );
});
};
....code continued....
我意识到这是某种范围蔓延之类的。那么,我如何让我的选项保持依附并保持在它们被赋予的原始对象(即#myDiv1)的范围内。
编辑: 在做一些研究时,我发现您可以使用 jQuery 的 .data 函数将数据存储到对象中,并且文档说 jQuery UI 广泛使用它。正确的做法是使用 .data 将选项存储在对象上,然后在稍后引用时使用存储在 .data 中的选项???
【问题讨论】:
-
响应您的编辑和 reinerpost 的正确答案,是的,数据对象是一个不错的选择。但是,请使用 jQuery UI 工厂 (jqueryui.com/docs/Developer_Guide#The_widget_factory) 进行检查。我用它为2010.newsweek.com 创建幻灯片代码(参见:jquery.slideshow.js)
标签: javascript jquery jquery-plugins