我一直试图围绕构建插件的好方法抓住我的想法,因此它可以接受带有选项的方法调用,只是方法调用,init上的选项和没有选项的init。
到目前为止,这就是我所拥有的。
(function($) {
var settings = {};
var defaults = {
args : "default args"
};
var methods = {
init : function(options) {
if(options) {
settings = $.extend({},defaults,options);
}
},
test : function(arg) {
alert("test: " + arg.args);
alert("args: " + settings.args);
}
};
$.fn.dataTable = function(method) {
var args = arguments;
var $this = this;
return this.each(function() {
if ( methods[method] ) {
return methods[method].apply( $this, Array.prototype.slice.call( args, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( $this, args );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.plugin' );
}
});
};
})(jQuery);
$(document).ready(function(){
$(".tbl").dataTable();
//$(".tbl").dataTable({ args : "hello world" });
$(".tbl").dataTable("test",{args:"test args passed"});
//$(".tbl").dataTable("test");
});
然而有了这个,我收到了
测试:测试args通过
和
args:undefined
任何帮助?
答案 0 :(得分:3)
(function($) {
var defaults = {
string1 : "hello ",
string2 : "world!"
};
var methods = {
init : function(options) {
if(options) {
$.extend(defaults,options);
}
alert(defaults.string1 + defaults.string2);
},
test : function(arg) {
alert("test: " + arg.args);
alert("args: " + defaults.string1 + defaults.string2);
}
};
$.fn.dataTable = function(method) {
var args = arguments;
var $this = this;
return this.each(function() {
if ( methods[method] ) {
return methods[method].apply( $this, Array.prototype.slice.call( args, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( $this, Array.prototype.slice.call( args, 0 ) );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.plugin' );
}
});
};
})(jQuery);
$(document).ready(function(){
$(".tbl").dataTable();
//$(".tbl").dataTable({ string1 : "foo", string2 : "bar" });
$(".tbl").dataTable("test",{args:"test args passed"});
//$(".tbl").dataTable("test");
});