Как получить доступ к функциям в плагинах jQuery извне плагина? - PullRequest
4 голосов
/ 22 ноября 2010

Возьмем, к примеру, плагин в виде:

jQuery.autocomplete = function(input, options) {
    function abc(){}
    function def(){}
}

Функции работают нормально и как положено.Однако я хочу иметь возможность вызывать функцию abc ();из $ (document) .ready (function () {});заявление.Следующее не работает, и я бы очень хотел получить совет.

$(document).ready(function() {
    jQuery.autocomplete.abc();
    abc();
    $(this)->abc();
}

Ответы [ 4 ]

4 голосов
/ 24 сентября 2012

Когда в инициализации плагина есть это ...

if( !data ) {
    /* Settings Extraction */
    $.extend(s, defaults, options);
    /* Initialize Code */
    /* Data Storage */
    var YoPlugin = $('<div />', {
        text : $this.attr('title')
    });
    $(this).data('YoPlugin', {
        target : $this,
        myInternalFunction: myInternalFunction,
        settings : $.extend({}, s),
        YoPlugin : YoPlugin
    });
    data = $this.data('YoPlugin');
}

Вы можете выставить внутренние функции, как продемонстрировала myInternalFunction.Попадание в объект из события, вызванного, скажем, $ ('body') оставляет 'this' непривычно в качестве тела, поэтому ...

var multiSel = $('.YoPlugin');
var singleSel = multiSel[0]; //or other way to select the singleton or specific plugin enhanced target
var pluginDataObj = $(singleSel).data('YoPlugin');
var func = pluginDataObj['myInternalFunction'];
func();

Полагаю, лучше добавить ссылку в качестве ссылки на внешний плагинт.е. как init: объявлен в плагине или аналогичных маршрутах через $ .fn.YoPlugin.myInternalFunction

В любом случае этот набор фрагментов предоставляет ночь исследований и разработок, чтобы помочь понять, что же такое lir bir betta.

Также вам обязательно нужно прочитать все, что вы можете усвоить здесь ...

http://alexsexton.com/blog/2010/02/using-inheritance-patterns-to-organize-large-jquery-applications/

0 голосов
/ 22 ноября 2010

В jQuery частные функции (например, те, которые вы описали в вопросе) обычно связаны с экземпляром. Внутри функции они используют локальную переменную или ключевое слово this для взаимодействия с экземпляром. Итак, я не понимаю, как их вызывать из-за нагрузки. Если плагин был разработан правильно, автор будет реализовывать обратные вызовы там, где это необходимо; обратные вызовы будут назначаться через экземпляр, но не глобально.

Если вы пишете этот плагин и хотите такое поведение, синтаксис может выглядеть примерно так:

jQuery.autocomplete = function(input, options) {} 
jQuery.autocomplete.abc = function(){};
jQuery.autocomplete.def = function(){};

Эти функции будут доступны через $.autocomplete.

0 голосов
/ 23 ноября 2010

Хорошо, когда вы ввели текст в поле, плагин jQuery добавил div в облако тегов. Нажав на один из этих «тегов», вы добавили его во вторичный список. Щелчок по вторичному списку удаляет элемент из вторичного списка. Затем я хотел, чтобы этот щелчок добавил элемент в основной список, только если он соответствовал тексту, введенному в поле. По этой причине я хотел снова запустить код автозаполнения. Чтобы обойти это, я добавил в свой частный код вторичную функцию с событием «click», а не «keydown». Это позволило мне добавить триггер («щелчок») к элементам div во вторичном списке, который снова вызвал действие автозаполнения. Задача решена. Я не мог понять это без вашей помощи, ребята. Спасибо!

0 голосов
/ 22 ноября 2010

Ваша функция автозаполнения должна была бы каким-то образом явно сделать эти функции доступными, возможно, поместив ссылки на них на некоторый глобальный объект.В противном случае они полностью скрыты от внешнего мира, и к ним нельзя получить доступ.

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