Клуб API Карт

Ошибка при создании кластера

darkmerge
1 сентября 2015, 02:17

Была необходима фильтрация по карте, добавил радио кнопки. Первые 2 работают нормально, последняя - выдает странную ошибку. Гугление не помогает, помогите пожалуйста мне) проект горит)

 

 

ymaps.ready(function () {
var myMap = new ymaps.Map('map', {
center: [50,50],
zoom: 5,
type: 'yandex#map',
controls: ['zoomControl', 'typeSelector','routeEditor','fullscreenControl','rulerControl']
}, {
searchControlProvider: 'yandex#search'
}),
clusterer = new ymaps.Clusterer({
preset: 'islands#darkGreenCircleIcon',
gridSize: 80
}),
geoObjects = [];
for (var i = 0; i < groups[0].items.length; i++) {
geoObjects[i] = new ymaps.Placemark(groups[0].items[i].center, {
balloonContentHeader: groups[0].items[i].name,
balloonContentFooter: groups[0].items[i].content,
hintContent: groups[0].items[i].hint
}, {
iconLayout: groups[0].items[i].resetIcon,
iconImageHref: groups[0].items[i].myIcon,
iconImageSize: groups[0].items[i].iconSize,
preset: 'twirl#nightStretchyIcon'
});
}
clusterer.add(geoObjects);
myMap.geoObjects.add(clusterer);
function clear_all () {
clusterer.removeAll();
myMap.geoObjects.remove(clusterer);
};
function checkState () {
geoObjects = [];
clear_all();
if ($('#all_problem').prop('checked')) {
for (var i = 0; i < groups[0].items.length; i++) {
geoObjects[i] = new ymaps.Placemark(groups[0].items[i].center, {
balloonContentHeader: groups[0].items[i].name,
balloonContentFooter: groups[0].items[i].content,
hintContent: groups[0].items[i].hint
}, {
iconLayout: groups[0].items[i].resetIcon,
iconImageHref: groups[0].items[i].myIcon,
iconImageSize: groups[0].items[i].iconSize,
preset: 'twirl#nightStretchyIcon'
});
}
} else if ($('#active').prop('checked')) {
for (var i = 0; i < groups[0].items.length; i++) {
if (groups[0].items[i].problem_status == "В процессе решения") {
geoObjects[i] = new ymaps.Placemark(groups[0].items[i].center, {
balloonContentHeader: groups[0].items[i].name,
balloonContentFooter: groups[0].items[i].content,
hintContent: groups[0].items[i].hint
}, {
iconLayout: groups[0].items[i].resetIcon,
iconImageHref: groups[0].items[i].myIcon,
iconImageSize: groups[0].items[i].iconSize,
preset: 'twirl#nightStretchyIcon'
});
}
}
} else if ($('#compl').prop('checked')) {
for (var i = 0; i < groups[0].items.length; i++) {
if (groups[0].items[i].problem_status == "Проблема решена") {
console.log(groups[0].items[i].problem_status);
geoObjects[i] = new ymaps.Placemark(groups[0].items[i].center, {
balloonContentHeader: groups[0].items[i].name,
balloonContentFooter: groups[0].items[i].content,
hintContent: groups[0].items[i].hint
}, {
iconLayout: groups[0].items[i].resetIcon,
iconImageHref: groups[0].items[i].myIcon,
iconImageSize: groups[0].items[i].iconSize,
preset: 'twirl#nightStretchyIcon'
});
}
}
};
clusterer.add(geoObjects);
myMap.geoObjects.add(clusterer);
};
$('#all_problem').click(checkState);
$('#active').click(checkState);
$('#compl').click(checkState);
});

 

При кликах на первые 2 пункта все происходит без проблем. При клике на последний выдает ошибку:

Браузер Хром 44.0.2403.157 m

Мозилла выдает такую ошибку:

это строк кода в combine.xml: t=Math.round(Math.random()*1e4);this.prefix=function(){return e},this.gen=n,this.get=function(t){return t===window?e:t[e]||(t[e]=n())}};e(t)})}]


5 комментариев
Подписаться на комментарии к посту
Нужна ссылка на страницу, а не код.
И включить режим дебага (&mode=debug в урл подключения АПИ)

И уберите что ли создание метки в отдельную функцию, а то одно и тоже 4 раза – в глазах рябит

Ссылку на страницу, увы, дать не могу.

 

в дебаге видно этот участок кода, ошибка в конце:

/**

         * @ignore

         * Генерирует случайный ID. Возвращает результат в виде строки символов.

         * @returns {String} ID

         * @example

         * util.id.gen(); // -> '45654654654654'

         */

        this.gen = gen;

 

        /**

         * @ignore

         * Генерирует id и присваивает его свойству id переданного объекта. Если свойство id объекта существует,

         * то значение этого свойства не изменяется. Возвращает значение id в виде строки.

         * @param {Object} object Объект

         * @returns {String} ID

         */

        this.get = function (object) {

            return object === window ? prefix : object[prefix] || (object[prefix] = gen());

        };

Ну видимо у вас вместо объекта ничего не приходит.
Включите Chrome Developer Tools, поставьте brakepoint и смотрите Call Stack откуда и с чем этот метод вызван.

Пока безрезультатно, но вывел последовательность ошибки. Выдает ошибку только если точек больше одной. Нет соображений по этому поводу?

При выводе всех точек карты я получаю и передаю в кластерер массив такого вида: [Placemark, Placemark, Placemark, Placemark].

Но при обнулении этого массива и последующим перебором точек я получаю массив в виде [Placemark, 3: Placemark]

Решил проблему. Оказывается у меня создавались пустые ячейки в массиве...вот я дурак