Класс JavaScript фильтр для скрытия и отображения содержимого на данные-атрибуты


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

Просьба снести мой светлоглазый naivetie с комментировать код, стиль, дизайн, и т. д. Если мне и дайте мне знать, если это не то, что этот сайт для.

Это класс фильтра, который скрывает и показывает длинные списки содержимого в контейнере ДИВС на основе метаданных. Образец содержимого элемента div:

<div class="todd.packer StreamContent" 
  data-username="todd.packer" 
  data-topic_id="13" 
  data-post_id="1394">
  ...
</div>

Сам класс (опирается на jQuery):

function StreamFilter(_containerId, _testAttribute, _targetStyleClass, _applyStyleClass, _testFor){
    return{
        active : false,
        filterHash : {},
        testFor : _testFor,
        CONTAINER_ID : _containerId,
        TEST_ATTRIBUTE : _testAttribute,
        TARGET_STYLE_CLASS : _targetStyleClass,
        APPLY_STYLE_CLASS : _applyStyleClass,

        on : function(){
            this.active = true;
            this.enforce();
        },

        off : function(){
            this.clear();
            this.active = false;
            this.unenforce();
        },

        clear : function(){
            this.filterHash = {};
        },

        add_key : function(_key){
        // messages with matching metadata will be displayed
            this.filterHash[_key] = true;
        },

        filter_only : function(_key){
            this.clear();
            this.add_key(_key);
            this.on();
        },

        test : function(_key){
            return(this.filterHash[_key]);
        },
        render : function(_$object){
            if(this.active && ((this.test(_$object.attr(this.TEST_ATTRIBUTE)) === true) === this.testFor)){
                _$object.addClass(this.APPLY_STYLE_CLASS);
            }
            return _$object;
        },

        enforce : function(){
            var i;
        // possible performance problems
            $("#" + this.CONTAINER_ID + " ." + this.TARGET_STYLE_CLASS).addClass(this.APPLY_STYLE_CLASS);
            //first hide everything...
            for(i in this.filterHash){ 
                    // For each attribute and value in add_key, remove the hidden class
                    $("[" + this.TEST_ATTRIBUTE + "='" + i + "']").removeClass(this.APPLY_STYLE_CLASS);
            }
        },

        unenforce : function(){
            $("#" + this.CONTAINER_ID + " ." + this.TARGET_STYLE_CLASS).removeClass(this.APPLY_STYLE_CLASS);
        }
    };
}


1157
2
задан 6 мая 2011 в 04:05 Источник Поделиться
Комментарии
1 ответ

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

Просто поставив каждую вещь на предмет поражений ссылки. Вместо этого вы должны определить все в защищенную часть функции и просто открывать внешнего API с возвращением.

http://codr.cc/s/9b31baa5/js

2
ответ дан 7 мая 2011 в 05:05 Источник Поделиться