комментарий jQuery плагин - обертка для вкладки пользовательского интерфейса jQuery по


Это jQuery-плагин, который я создал, которая опирается на плагин вкладок в jQuery пользовательского интерфейса. Он добавляет какие-то рамки определенной логики при настройке вкладки:

  1. Исправлена ошибка в jQuery, который появляется, когда идентификатор/класс содержит "".
  2. Управляет вкладке Состояние в рамках определенного API печенье (не использовать плагин jQuery cookie-файлов).
  3. Предоставляет несколько вариантов для перехода поведения

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

(function ($) {
    $.fn.dnnTabs = function (options) {
        var opts = $.extend({}, $.fn.dnnTabs.defaultOptions, options),
            $wrap = this;

        $(document).ready(function () {
            // Patch for Period in IDs (jQuery bug)
            $.ui.tabs.prototype._sanitizeSelector = function (hash) {
                // we need this because an id may contain a ":" or a '.'
                return hash.replace(/:/g, "\\:").replace(/\./g, "\\\.");
            };

            var id = 'dnnTabs-' + $wrap.selector.replace('#', '').replace('.', '');
            if (opts.selected === -1) {
                var tabCookie = dnn.dom.getCookie(id);
                if (tabCookie) {
                    opts.selected = tabCookie;
                }
                if (opts.selected === -1) {
                    opts.selected = 0;
                }
            }

            $wrap.tabs({
                show: function (event, ui) {
                    dnn.dom.setCookie(id, ui.index, 1, '/', '', false);
                },
                selected: opts.selected,
                fx: {
                    opacity: opts.opacity,
                    duration: opts.duration
                }
            });
        });

        return $wrap;
    };

    $.fn.dnnTabs.defaultOptions = {
        opacity: 'toggle',
        duration: 'fast',
        selected: -1
    };

})(jQuery);


1035
3
задан 25 апреля 2011 в 07:04 Источник Поделиться
Комментарии
1 ответ

Это, наверное, больше комментариев, но я выложу их как "ответ", потому что так проще.


  • Не могли бы вы указать источник или пример баг с идентификаторов/классов, содержащие . и :потому, что в быстрый тест, они, кажется, работает нормально: http://jsfiddle.net/NSXLc/

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

  • Как вы получаете идентификатор для файла cookie выглядит опасно неправильно. Вы берете на себя рычаг всегда просто ID или селектора класса и распространяющееся на что вы предполагаете, что селектор соответствует только один элемент и, следовательно, только один набор вкладок инициализируются одновременно.

Это, наверное, лучше сделать что-то вроде этого:

$wrap.each(function() { // In case the selector matches multiple elements
var showEvent = null;
if (this.id) { // only use cookie if ID is set. TODO: use className as alternative
var id = 'dnnTabs-' + this.id;
if (opts.selected === -1) {
// ...
}

showEvent = (function(cookieId) { // closure for cookie id
return function (event, ui) {
dnn.dom.setCookie(cookieId, ui.index, 1, '/', '', false);
}
})(id);
}
$(this).tabs({
show: showEvent,
// ...
});
});

2
ответ дан 26 апреля 2011 в 10:04 Источник Поделиться