我的代码如下所示:
(function($, window, undefined){
var options, methods = {
init : function(opts){
options = $.extend({}, {
width : 800,
height : 600,
}, opts);
return this.each(function(){
data = $(this).data('prodigal');
if(!data){
$(this).data('prodigal', options).on('click', openl);
}
});
},
},
openl = function(){
console.log(options);
};
$.fn.prodigal = function(method) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.prodigal' );
}
};
})(jQuery)
我称之为:
$('.view_title_images').prodigal({width: 500});
$('.glglg').prodigal({ width: 600 });
问题是当我输出options
in时,openl
我实际上得到的两个选择器都显示了width
600 的设置。
直到最近,我将元素特定信息存储在元素数据标签上:$(this).data('prodigal', options)
然后在我创建的每个函数中访问该数据,这样openl
顶部就会有一行:options = $(this).data('prodigal')
.
我确实尝试使用公共方法,但我似乎无法$(this).data('prodigal', options).on('click', openl);
在行中绑定这些公共方法,它不断产生错误。
我是否还应该尝试将我的设置存储在我的元素数据标签中,或者我在构建 jQuery 插件时缺少什么?如何管理插件中的设置?
我搜索过的以前的主题似乎没有清楚地涵盖这一点。