我需要更短的访问我的jQuery插件方法

时间:2013-06-20 20:42:23

标签: jquery plugins jquery-plugins

可能一个问题已经回答了这个问题,但经过一段时间的搜索后,我找不到符合这种模式的确定答案。

所以在最基本的层面上我的插件看起来如下所示,一旦元素通过,我希望能够做的就是能够对插件的方法进行简短的引用,例如:

元素上的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);

同样,我确信必须在某个地方回答这个问题。我只需要“最短”的方法来访问这些方法。

感谢。

1 个答案:

答案 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并执行。

这有用吗?