我有一个这样的插件。
(function ($) {
var settings = {
setting 1: undefined
};
var methods = {
init: function (options) {
var data = $(this).data('myPlugin');
if (!data) {
//initialize plugin
$(this).data('myPlugin', {
setting1: settings.setting1
});
}
},
doSomething: function() {
//...do some work
}
sendData: function(data) {
//TODO: Post data to the server
}
};
$.fn.myPlugin = function (options) {
if (methods[options]) {
return methods[options].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof options === 'object' || !options) {
methods.init.apply(this, arguments);
return methods.home.apply(this, arguments);
} else {
$.error('Method ' + options + ' does not exist in jQuery.myPlugin');
}
};
})(jQuery);
当我像这样使用它时,这很有效。
$('#myId').myPlugin({ setting1 : 'someValue' });
当我想做像
这样的事情$('#myId').myPlugin('doSomething');
但是如何修改上面的代码来支持这个......
var myData = 'some data';
var moreData = 'some more data';
$('#myId').myPlugin('sendData', { data: myData, moreData: moreData } );
...在哪里我可以传递任何我想要的第二个参数并将该参数传递给函数?
答案 0 :(得分:1)
这样的事情应该有效(在适当的地方好起来)
if( typeof options == "object" ) {
// settings
} else {
// action (better to explicitly check for string and undefined though)
if( arguments.length > 1 ) {
var action_options = arguments[1];
}
}