Первый плагин jQuery: TagCloud - PullRequest
0 голосов
/ 18 декабря 2009

Это мой первый плагин jQuery. Могу ли я получить некоторые указатели? В настоящее время он не работает ...

; (function($) {

$.fn.tagCloud = function(options) {
        options = options || {};

    var maxPercent = options['maxPercent'] || 150;
    var minPercent = options['minPercent'] || 100;
    var retrieveCount = options['retrieveCount'] || function(element) { return $(element).attr('rel'); };
    var apply = options['apply'] || function(element, size) { $(element).attr('style', 'font-size:' + size + '%;'); };

    var max = null;
    var min = null;

    var tagElements = this;

    tagElements.each(function(element) {
        count = retrieveCount(element);
        max = (max == null || count > max ? count : max);
        min = (min == null || min > count ? count : min);
    });

    var multiplier = (maxPercent - minPercent) / (max - min);

    tagElements.each(function(element) {
        count = retrieveCount(count);
        size = (minPercent + (count - min) * multiplier);
        apply(element, size);
    });
}
})(jQuery);

Использование: $('a.tag').tagCloud();

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

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

$.fn.tagCloud.defaults = {
    maxPercent: 150,
    minPercent: 100,
    countCallback: function(element){return $(element).attr('rel');},
    applyCallback: function(element, size) { $(element).attr('style', 'font-size:' + size + '%;');}
};

И тогда в самом начале вашего плагина вы бы заменили множество этих объявлений var на простой:

var o = $.extend($.fn.tagCloud.defaults, options||{});

тогда вы получите доступ ко всему с помощью o.* или o['*']. Id также превратит некоторых из вас в логику в инкапсулированные методы. Обычно я хочу / ожидаю увидеть только один блок this.each () для первичной логики.

Кроме того, я считаю, что если у вашего селектора нет элементов в его коллекции, вы будете делить на 0 или NaN, что обычно является нет-нет. Если я прав, вы можете установить значение по умолчанию min / max равным 1 или выполнить простую проверку, чтобы убедиться, что длина коллекции> 0, и выручить, если она не зависит от того, что вы хотите.

0 голосов
/ 18 декабря 2009

Я понял это:

; (function($) {

$.fn.tagCloud = function(options) {
    options = options || {};

    var maxPercent = options['maxPercent'] || 150;
    var minPercent = options['minPercent'] || 100;
    var retrieveCount = options['retrieveCount'] || function(element) { return $(element).attr('rel'); };
    var apply = options['apply'] || function(element, size) { $(element).attr('style', 'font-size:' + size + '%;'); };

    var max = null;
    var min = null;

    var tagElements = this;

    tagElements.each(function(index) {
       var count = retrieveCount(this);
        max = (max == null || count > max ? count : max);
        min = (min == null || min > count ? count : min);
    });

    var multiplier = (maxPercent - minPercent) / (max - min);

    tagElements.each(function(index) {
       var count = retrieveCount(this);
        size = (minPercent + (count - min) * multiplier);
        apply(this, size);
    });
}
})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...