Javascript 编写jQuery插件,将$.extend设置为可在其他函数上访问
我正在学习编写一些jQuery插件,在我使用的结构之前:Javascript 编写jQuery插件,将$.extend设置为可在其他函数上访问,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正在学习编写一些jQuery插件,在我使用的结构之前: !(function($){ var defaults = { target: '' }; $.fn.myplugin = function(options){ var opts = $.extend({}, defaults, options) return this.each(function(){ //
!(function($){
var defaults = {
target: ''
};
$.fn.myplugin = function(options){
var opts = $.extend({}, defaults, options)
return this.each(function(){
//
});
}
})(jQuery);
现在,我想为我的插件应用一些更新方法,所以我在github上签出了一些插件。这是一个非常适合我的结构:
!(function($){
var defaults = {
target: ''
},
build = function(){
},
methods = {
init: function(options){
var settings = $.extend({}, defaults, options)
},
update: function(){
}
};
$.fn.myplugin = function(method){
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('error message');
}
}
})(jQuery);
但是,$.extend
是在init
函数上声明的,我在访问其他函数(如build
上的设置)时遇到问题。我只能通过在init
内部调用函数build
并传递这样的参数来访问它(这是一件可怕的事情):
我需要将
$.extend({},默认值,选项)
移动到其他地方,以便在init
之外的函数上访问它。请帮帮我,谢谢 使用.data()
jQuery函数在元素上存储设置
methods = {
init: function(options){
var settings = $.extend({}, defaults, options);
this.data('settings', settings);
},
update: function(){
var settings = this.data('settings');
}
};
更完整的代码:
!(function($){
var defaults = {
target: ''
},
build = function(settings){
// use settings.target here
},
methods = {
init: function(options){
var settings = $.extend({}, defaults, options)
this.data('settings', settings);
},
update: function(){
var settings = this.data('settings');
build(settings);
}
};
$.fn.myplugin = function(method){
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('error message');
}
}})(jQuery);
使用此插件:
$(element).myplugin();
$(element).myplugin('update');
当我调用$(element).myplugin('update')
时,我得到了一个错误,因为设置仍然是未定义的-未捕获类型错误:无法读取未定义的的属性'target'。首先你应该调用$(element).myplugin()
然后调用$(element).myplugin('update')
$(element).myplugin();
$(element).myplugin('update');