Всем привет! Столкнулся с проблемой фильтрации, а точнее не могу понять, почему значения не срабатывают.
За основу range слайдера беру jquery ui slider - range slider с двумя ползунками. И есть JSON файл, у которого в properties прописано два значения - minprice и maxprice ( "properties": {"maxprice": "20000", "minprice": "1000"...}) и есть код:
function init() {
var myMap = new ymaps.Map('YMapsID', {
center: [37.573856, 55.751574],
zoom: 10
});
jQuery.getJSON('data1.json', function (json) {
var myObjects = ymaps.geoQuery(json)
.addToMap(myMap)
.applyBoundsToMap(myMap, {
checkZoomRange: true
});
var shownObjects,
byColor = new ymaps.GeoQueryResult(),
byShape = new ymaps.GeoQueryResult(),
byPrice = new ymaps.GeoQueryResult();
function checkState () {
// Отберем объекты по цвету.
if ($('#red').prop('checked')) {
// Будем искать по двум параметрам:
// - для точечных объектов по полю preset;
// - для контурных объектов по цвету заливки.
byColor = myObjects.search('options.fillColor = "#ff1000"')
.add(myObjects.search('options.preset = "islands#yellowStretchyIcon"'));
}
if ($('#red').prop('checked')) {
// Будем искать по двум параметрам:
// - для точечных объектов по полю preset;
// - для контурных объектов по цвету заливки.
byCity = myObjects.search('properties.fillColor = "#ff1000"')
.add(myObjects.search('options.preset = "islands#yellowStretchyIcon"'));
}
if ($('#green').prop('checked')) {
byColor = myObjects.search('options.fillColor = "#00ff00"')
.add(myObjects.search('options.preset = "islands#greenStretchyIcon"'))
// После того, как мы нашли все зеленые объекты, добавим к ним
// объекты, найденные на предыдущей итерации.
.add(byColor);
}
if ($('#yellow').prop('checked')) {
byColor = myObjects.search('options.fillColor = "#ffcc00"')
.add(myObjects.search('options.preset = "twirl#yellowIcon"'))
.add(byColor);
}
// Отберем объекты по форме.
if ($('#point').prop('checked')) {
byShape = myObjects.search('geometry.type = "Point"');
}
if ($('#polygon').prop('checked')) {
byShape = myObjects.search('geometry.type = "Polygon"').add(byShape);
}
if ($('#circle').prop('checked')) {
byShape = myObjects.search('geometry.type = "Circle"').add(byShape);
}
// Вот тут:
var minimus = $( "#slider-range" ).slider( "values", 0 );
byPrice = myObjects.search('properties.minpr > minimus').add(byPrice);
//
// Мы отобрали объекты по цвету и по форме. Покажем на карте объекты,
// которые совмещают нужные признаки.
shownObjects = byColor.intersect(byShape
// Объекты, которые не попали в выборку, нужно убрать с карты.
myObjects.remove(shownObj
}
$('#red').click(checkState);
$('#green').click(checkState);
$('#yellow').click(checkState);
$('#point').click(checkState);
$('#polygon').click(checkState);
$('#circle').click(checkState);
$(function() {
$('#slider-range').slider({
range: true,
min: 0,
max: 8000,
values: [ 75, 7750 ],
slide: function( event, ui ) {
$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
},
stop: function(event, ui) {
checkState();
}
});
$( "#amount" ).val( "$" + $( "#slider-range" ).slider( "values", 0 ) +
" - $" + $( "#slider-range" ).slider( "values", 1 ) );
});
});
}
За основу брал фильтрацию 2.0. И вывести фильтрацию по option.preset получилось нормально, а теперь при выполнении всей функции checkState() все просто исчезает.
Может кто знает, как без objectManager'a? И в чем ошибка может быть, что все пропадает?
З.Ы. Подобное делал через objectManager, при том очень гладко все прошло - сформирован запрос к json файлу на изменение чего либо, и проверяет просто properties.