可能一个问题已经回答了这个问题,但经过一段时间的搜索后,我找不到符合这种模式的确定答案。
所以在最基本的层面上我的插件看起来如下所示,一旦元素通过,我希望能够做的就是能够对插件的方法进行简短的引用,例如:
元素上的Init插件:
$('#myElement').myPlugin({ options });
然后访问方法:
$('#myElement').myPlugin('myFirstMethod', { params });
这是插件shell:
;(function($) {
"use strict";
var plugin = {};
var defaults = {
myDefault: 'some_value'
};
$.fn.myPlugin = function(options){
if(this.length > 1){
this.each(function(){$(this).myPlugin(options);});
return this;
}
var myplugin = {};
var element = this;
plugin.element = this;
var init = function() {
myplugin.settings = $.extend({}, defaults, options);
// Other init stuff here
};
form.myFirstMethod = function(){
// Do something
};
form.mySecondMethod = function(){
// Do something else
};
init();
return this; // returns the current jQuery object
}
})(jQuery);
同样,我确信必须在某个地方回答这个问题。我只需要“最短”的方法来访问这些方法。
感谢。
答案 0 :(得分:2)
我个人讨厌通过pluginName('method', 'params')
调用方法,因为它没有提供javascript提供的完整工具包。另外,我不喜欢为两个不同的目的调用相同的方法。在您的情况下,您希望$().myPlugin()
初始化并$().myPlugin("methodName")
执行方法。对于两个完全不同的目的,这是一种方法myPlugin()
。但如果这是你想要滚动的方式,我认为下面的代码就足够了。
// plugin
(function($) {
var myplugin = function(elm) {
this.elm = $(elm);
};
myplugin.prototype.myFirstMethod = function() { console.log("firstmethod"); }
myplugin.prototype.mySecondMethod = function() { console.log("secondmethod"); }
$.fn.myplugin = function() {
var myArgs = arguments;
return this.each(function() {
if (!$(this).data("myplugin")) {
$(this).data("myplugin", new myplugin(this));
}
var api = $(this).data("myplugin");
if (myArgs.length > 0) {
api[myArgs[0]](myArgs[1]);
}
});
};
})(jQuery);
// init plugin
$(".foo").myplugin();
$(".foo").myplugin("myFirstMethod");
请记住,如果要在jquery集合的每个元素上执行此方法,您需要执行each
并执行。
这有用吗?