Как добавить другую категорию фильтрации в List.js ?

#javascript #filtering

#javascript #фильтрация

Вопрос:

Я использую эту библиотеку: http://listjs.com /

Мне нужно добавить еще одну категорию для фильтрации, поэтому я добавил вот так:

 <script type="text/javascript">

    /* 
    * LOVELY THINGS
    */

    var templates = {
        valueNames: [ 'name', 'description', 'category' ]
    };

    var featureList = new List('lovely-things-list', templates);

    $('#filter-games').click(function() {
        featureList.filter(function(values) {
            if (values.category == "Game") {
                return true;
            } else {
                return false;
            }
        });
        return false;
    });

    $('#filter-NewCategory').click(function() {
        featureList.filter(function(values) {
            if (values.category == "NewCategory") {
                return true;
            } else {
                return false;
            }
        });
        return false;
    });


    $('#filter-beverages').click(function() {
        featureList.filter(function(values) {
            if (values.category == "Beverage") {
                return true;
            } else {
                return false;
            }
        });
        return false;
    });
    $('#filter-none').click(function() {
        featureList.filter(function(values) {
            return true;
        });
        return false;
    });
</script>
  

И кнопка, подобная этой:

 <li class="btn" id="filter-NewCategory">Only show New Category</li>
  

Тогда фильтрация работает некорректно. Первая кнопка для первой категории работает, вторая добавляет некоторые результаты, третья иногда работает и т. Д.

Может быть, кто-нибудь знает, что я делаю не так?

Ответ №1:

Атрибут, который получает функция фильтрации, представляет собой один элемент. Для сравнения необходимо выполнить следующее:

 $('#filter-games').click(function() {
    featureList.filter(function(item) {
        if (item.values().category == "Game") {
            return true;
        } else {
            return false;
        }
    });
    return false;
});
  

И для сброса фильтра вы можете просто сделать

 featureList.filter();
  

Полный пример здесь:
http://pastebin.com/UPB095pk

Ответ №2:

Похоже, ваш second .click привязан к #filter-games, когда вы хотите привязаться к #filter-NewCategory?

Попробуйте изменить код на чтение:

  $('#filter-NewCategory').click(function() {
    featureList.filter(function(values) {
        if (values.category == "NewCategory") {
            return true;
        } else {
            return false;
        }
    });
    return false;
 });