JQuery плагин с несколькими функциями - PullRequest
3 голосов
/ 12 апреля 2010

Согласно документации разработчика, плагины jquery должны иметь только одно пространство имен для всех доступных им функций. Это просто, если вы предоставляете только одну функцию для контекста (статический / элемент).

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

Ответы [ 3 ]

5 голосов
/ 12 апреля 2010

Я использовал 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();
1 голос
/ 12 апреля 2010

Плагины jQuery, как правило, используют строковый параметр для различных функций:

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

Я не могу придумать простой способ использовать синтаксис, который вы хотели бы использовать, поскольку наличие дополнительного свойства inbetween заставит this указывать на что-то другое, чем объект jQuery с выбранными элементами. Лично я нахожу использование строкового параметра, чтобы полностью изменить то, что функция делает несколько уродливым. $(...).myplugin().function() будет выполнимо, но, вероятно, не так эффективно, как просто использование этого строкового параметра.

0 голосов
/ 21 ноября 2011

Это хорошо объяснено в документации: http://docs.jquery.com/Plugins/Authoring#Namespacing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...