首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MixItUp过滤动态数据

用MixItUp过滤动态数据
EN

Stack Overflow用户
提问于 2015-09-04 08:34:41
回答 1查看 1.4K关注 0票数 1

我试图使用MixItUp过滤在AJAX回调方法中动态创建的数据。我有10个部分,每个部分有一个或多个过滤器。我面临的问题是,当我单击一个区段的筛选器时,所有其他部分的数据都会被隐藏。当我检查DOM时,显示none to块的覆盖操作不会发生。过滤器值都是唯一的。

代码语言:javascript
复制
    // The "bindHandlers" method will listen for whenever a button is clicked. 
bindHandlers: function () {
    var self = this;
    self.$filters.on('click', 'a', function (e) {
        self.parseFilters();
    });
},

parseFilters: function () {
    var self = this;
    // loop through each filter group and grap the active filter from each one.
    for (var i = 0, group; group = self.groups[i]; i++) {
        group.active = [];
        group.$inputs.each(function () {
            if ($(this).find('.selected').length > 0) {
                group.active.push($(this).attr('data-filter'));
            }
        });
    }
    self.concatenate();
},

concatenate: function () {
    var self = this;

    self.outputString = ''; // Reset output string

    for (var i = 0, group; group = self.groups[i]; i++) {
        self.outputString += group.active;
    }

    // If the output string is empty, show all rather than none:    
    !self.outputString.length && (self.outputString = 'all');

    // Send the output string to MixItUp via the 'filter' method:    
    if (self.$container.mixItUp('isLoaded')) {
        self.$container.mixItUp('filter', self.outputString);
    }
}

上面的代码是在AJAX回调函数中编写的,单击事件触发parseFilter函数并到达连接,而outputString只包含正确的过滤器名称,但它仍然隐藏了所有其他部分,这使我感到困惑。

有人能帮我吗。就我从googling中了解到的情况而言,我们需要用一个值设置数据筛选器,并给出与已过滤元素的类名相同的值。另外,我正在使用Knockout来绑定数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-07 07:24:37

最后我终于做到了。我不知道这是个完美的解决方案,但我就是这样做的。

对于每个有两个div的部分,一个用于筛选按钮,另一个用于报告块,我给出了唯一类( filter )和id (报告块),并在AJAX回调函数中绑定了如下代码

代码语言:javascript
复制
function SetSectionOneData() {

var $container = $('#SectionOneReports'), // Report tiles holding container id. 
$controls = $('.cd-tab-filter');  // Filter button holding div

$container.mixItUp({
    animation: {
        duration: 700,
        effects: 'fade translateY(600%) stagger(35ms)',
        easing: 'cubic-bezier(0.86, 0, 0.07, 1)',
        reverseOut: true
    },
    controls: {
        enable: false
    }
});

$controls.on('click', '.filter', function () {
    var $btn = $(this),
        filter = $btn.attr('data-filter');
     $btn.addClass('FltrBtn_active'); 
    var btnId = $btn.attr('id');
    if (btnId) {
        var productId = btnId.split('_')[1];
        var linkId = btnId.split('_')[2];
        $('*[id*=Filter_' + productId + ']:visible').each(function () {
            if ($(this).attr('id').split('_')[2] != linkId) {
                $(this).removeClass('FltrBtn_active');
            }
        });
    }
    $container.mixItUp('filter', 'none', function () {
        $container.mixItUp('filter', filter);
    });
});

}

如果有人发现有一个更好的/优化的解决方案,请告诉我。

不管怎样,谢谢大家

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32393604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档