Создание расширения JQuery $ .fn.extension - PullRequest
2 голосов
/ 25 сентября 2011

Я пишу плагин, который будет отображать маленький помощник при вызове.Он должен быть инициирован следующим образом:

$(el).santasLittleHelper([options])

Затем у плагина есть некоторые "события", такие же, как у пользовательского интерфейса jquery, и они должны запускаться так:

$(el).santasLittleHelper('evetnName', [options])

У меня естьпрототип работает, но у меня есть некоторые опасения по поводу будущих проблем с моей структурой.Переполнение памяти или другие проблемы с областями действия переменных и функций, когда я продолжаю работать над этим.Вот схема:

(function($) {

$.fn.santasLittleHelper = function(p1, p2) {

    return this.each(function() {
        var o = {
            showSpeed: 50,
            hideSpeed: 50,
            duration: 5000,
            delay: 0
        }
        var el = $(this);
        function init() {
            console.log('init 1');
        }
        var events = {
            show: function(opt) {},
            hide: function(opt) {},
            pulse: function(opt) {}
        }
        if(p1 == undefined) {//This is obviously the init call
            init();
        }
        if(typeof(p1) == 'object') {
            //Correctly added parameters would then mean that p1 is options
            //and is the only parameter added so we store the options and init
            $.extend(o, p1);
            init();
        }
        if(typeof(p1) == 'string') {
            //This is a call to an "event".
            //call the "event" function and supply possible options as arg
            events[p1](p2);
        }            
 });
}

})(jQuery);

Опции могут быть предоставлены для каждого вызова события, но в этом случае должны быть доступны только в этой области функции событий.Это потому, что я мог бы захотеть, чтобы помощник делал что-то из ментальных рамок, в которых я его создал, предоставляя опции в вызове init.

Будет ли этот подход немного заполнять память при каждом вызове $ (el) .santasLittleHelper ('событие') из-за объявленных переменных в начале кода?

Я думаю, что это выглядит чисто и понятно, но можно ли сделать улучшения?

1 Ответ

0 голосов
/ 25 сентября 2011

В соответствии с методами, описанными здесь , мне кажется, что вы делаете все правильно, но я постараюсь, если это возможно, сделать o и события независимыми от каждого (объявить его ранее и передать в качестве необязательного параметра если требуется переопределение, иначе использовать уникальное объявленное вне каждого?)

...