繁体   English   中英

具有多种功能的jquery插件

[英]jquery plugin with multiple functions

根据开发人员文档,jquery插件应该只有一个命名空间用于它们提供的所有功能。 只要您只为每个上下文公开一个函数(static / element),这是直截了当的。

(function($){

    var

    state_a = 0,

    $.myplugin = function(in_options) {
      // static
      return this;
    }

    $.fn.myplugin = function(in_options) {
      // element
      return this;
    }

})(jQuery);

这使得这样的调用成为可能:

$("elem").myplugin(options);
jQuery.myplugin(options);

如果您有多个功能并且需要共享状态,那么最佳方法是什么? 我想像这样调用我的插件:

$("elem").myplugin.start(options);
$("elem").myplugin.stop();
jQuery.myplugin.start(options);
jQuery.myplugin.stop();

我之前使用过arguments.callee:

(function ($) {
    $.fn.pagination = function (options) {
        var defaults = {
        };
        options = $.extend(defaults, options);

        var object = $(this);

        arguments.callee.updatePaging = function () {
            //do stuff
        };
    });

然后,在您的页面上:

    var pagination = $("#pagination");
    pagination.pagination();
    pagination.pagination.updatePaging();

jQuery插件倾向于为不同的函数使用字符串参数:

$(...).myplugin('start', options);
$(...).myplugin('stop');

我想不出一种简单的方法来使用你想要使用的语法,因为在中间有一个额外的属性会使this一点与具有所选元素的jQuery对象不同。 就个人而言,我发现使用字符串参数来完全改变函数的功能有点难看。 $(...).myplugin().function()是可行的,但可能不如使用该字符串参数那样有效。

这在文档中有很好的解释: http//docs.jquery.com/Plugins/Authoring#Namespacing

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM