Расширение mixItUp() js для фильтрации на основе значения раскрывающегося меню и диапазона дат

Я пытаюсь жениться на двух настроенных сценариях фильтрации MixItUp. Один интегрирует bootstrap.datepicker для фильтрации на основе диапазона дат, а другой расширяет структуру для фильтрации на основе активного элемента в раскрывающихся списках.

У меня проблема с аргументом, переданным в функцию фильтра mixItUp(). Похоже, что он передается как [объект, объект], и это соответствует рабочей версии.

Bootstrap Datepicker: у меня это работает само по себе и прекрасно работает как единый фильтр: http://codepen.io/EricBintner/pen/wGWgpX

- & -

Фильтр из выпадающего списка: этот пример хорошо прокомментирован, но более сложен по структуре, чем я обычно имею дело: http://codepen.io/patrickkunka/pen/Fqocw

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

init: function() {
        var self = this;
        ...
}

Я получил все работает и успешно направлен в функцию mixItUp(). Я поместил прослушиватели событий из средства выбора даты в раскрывающиеся списки прослушивателей событий. Что-то в аргументе диапазона дат не должно быть правильным, когда оно передается с переменной "self". Он передает аргумент функции mixItUp(), и я получаю console.log для печати, но MixItUp не фильтрует таким образом на основе этого диапазона дат - вместо этого он отфильтровывает все.

Вот расширение datepicker для выпадающего скрипта, который, похоже, имеет проблему. В частности, self.$ Show var - это то, что передается в функцию фильтра, и то, что кажется неправильным - возможно, я вставил "себя" в слишком много мест:

    filterDates: function() {
            var self = this;
            self.startDay = self.$startDate.val();
            self.endDay = self.$endDate.val();

if (self.endDay == 0) {
                return false
            } else {
                self.$targets = $('#mixContainer').find('.mix');
                self.$show = self.$targets.filter(function() {
                    self.date = self.$targets.attr('data-date').replace(/(\d\d\d\d)(\d\d)(\d\d)/g, '$1$2');
                    return (self.date >= self.startDay) && (self.date <= self.endDay);
                });
                console.log(self.$show)      // says [object, Object]
                self.parseFilters();
                return self.$show;          
            } 
         },

В любом случае, я думаю, что я очень близок, так что надеюсь, кому-то здесь будет легко.

Вот полный кодовый блок, который я создал: http://codepen.io/EricBintner/pen/VaawgX (не удается отфильтровать по диапазону дат)

Спасибо за помощь!!

Дополнительные ресурсы: https://mixitup.kunkalabs.com/support/topic/best-way-to-filter-based-on-provided-date-ranges/

1 ответ

Вот рабочий код: http://codepen.io/EricBintner/pen/NNbGMX

Несколько вещей были восстановлены, поэтому нет простого ответа. Спасибо тем, кто помог.

Этот новый метод заменил два метода в предыдущей версии:

parseCategoryFilters: function () {

    var self = this;
    self.groups.each(function ( idx, filter ) {

        // If this filter has a value, filter by it
        var filter_value = filter.value || '';
        if ( filter_value.length > 0 ) {
            self.$show = self.$show.filter(function ( idx, target ) {
                return $(target).hasClass(filter_value);
            });
        }

    });

    // Perform final filter
    self.$mixContainer.mixItUp('filter', self.$show, function ( state, instance ) {
        instance._activeFilter = '';
    });

}

Другие вопросы по тегам