0

可能已经像这样回答了一个问题,但是在搜索了一段时间后,我找不到与此模式匹配的明确答案。

所以在最基本的层面上,我的插件如下所示,一旦一个元素通过了,我想要做的就是能够对插件的方法有一个简短的引用,比如:

元素上的初始化插件:

$('#myElement').myPlugin({ options });

然后访问一个方法:

$('#myElement').myPlugin('myFirstMethod', { params });

这是插件外壳:

;(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);

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

谢谢。

4

1 回答 1

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

那样有用吗?

于 2013-06-20T20:56:50.453 回答