2015-06-01 3 views
4

У меня есть карта, построенная в Mapbox, которая объединяет GeoJSON. Я пытаюсь фильтровать маркеры по двум критериям: category (несколько true/false properties) и year. Я хочу, чтобы два фильтра работали одновременно, а не отменяли друг друга, но я застреваю при их объединении.jQuery/Mapbox multiple data filters issue

Каждый фильтр работает независимо - это то, что я за год:

$('.year a').on("click", function() { 
    var year = $(this).data('filter'); 
    $(this).addClass('active').siblings().removeClass('active'); 
    featureLayer.setFilter(function(f) { 
     return (year === 'all' || f.properties.Year === year); 
    }); 
    return false; 
}); 

и это то, что у меня есть для категории:

$('.category a').on("click", function() { 
    var category = $(this).data('filter'); 
    $(this).addClass('active').siblings().removeClass('active'); 
    featureLayer.setFilter(function(f) { 
     return ((category === 'all') ? true : f.properties[category] === true); 
    }); 
    return false; 
}); 

Это, как я объединил их, но я знаю, Я делаю что-то не так.

$('.category a, .year a').on("click", function() { 
    var category = $(this).data('filter'); 
    var year = $(this).data('filter'); 
    $(this).addClass('active').siblings().removeClass('active'); 
    featureLayer.setFilter(function(f) { 
     return ((category === 'all') ? true : f.properties[category] === true) && 
     (year === 'all' || f.properties.Year === year); 
    }); 
    return false; 
}); 

Я думаю, что я пропускаю шаг дифференцироваться два фильтр поиска, но я не очень хорошо знаком с JQuery, так что я не уверен, что мне нужно сделать. В частности, я думаю, что мне не хватает части, где категория var ассоциируется с .category a, а year var ассоциируется с .year a.

Любые указатели в правильном направлении были бы очень признательны. Благодаря!

+0

Ваша категория и год устанавливаются на одну и ту же вещь! –

+0

У вас есть живой пример, сидящий где-то? @MattParrilla прав, но трудно подтвердить, что это проблема. –

+0

@BillMorris Да! Он находится здесь: http://www.sevendaysvt.com/general/multimedia/projects/stuckinvtmap/stuckmap5.html – suoz

ответ

2

suoz,

Ваша проблема может быть так, как вы ориентируетесь селекторы, чтобы связать событие щелчка. Правильный путь:

$('.category a, .year a').on('click', function() { ... }); 

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

+0

Спасибо, Инасио - вы правы, я не знал, t подавать в селекторах вправо. Я исправил это, и теперь функции «выбрать все» для обоих фильтров работают, но он по-прежнему не фильтруется по категориям или году, поэтому я думаю, что у моего кода есть и другие проблемы. Я что-то пропустил? – suoz

+0

@suoz, ваш код не ошибается, кроме селекторной проблемы. Я думаю, что вы делаете не то, что нужно. Вы должны попробовать этот подход из примеров Mapbox: https://www.mapbox.com/mapbox.js/example/v1.0.0/filtering-marker-clusters/ –

1

В настоящее время вы устанавливаете year и calendar на то же значение. Попробуйте прямо настроить таргетинг на элементы вместо использования this, чтобы избежать этой проблемы.

$('.category a, .year a').on("click", function() { 

    var category = $('.category a').data('filter'); 
    var year = $('.year a').data('filter'); 

    $(this).addClass('active').siblings().removeClass('active'); 
    featureLayer.setFilter(function(f) { 
     return ((category === 'all') ? true : f.properties[category] === true) && 
     (year === 'all' || f.properties.Year === year); 
    }); 
    return false; 
});