Клуб API Карт

глючит геокодирование

EgorPost
11 февраля 2012, 13:41
Доброго времени суток!

я добавляю метки на карту используя след. код:

<script type="text/javascript">
$(document).ready(function(){
var descr = $('#hidden_info_<?=$count?>').html(
var geocoder_<?=$count?> = new YMaps.Geocoder('<?=$address;?>');
YMaps.Events.observe(geocoder_<?=$count?>, geocoder_<?=$count?>.Events.Load, function () {
var coords_<?=$count?> = this.get(0).getGeoPoint(
//alert(coords);
var mark_<?=$count?> = new YMaps.Placemark(coords_<?=$count?>, {style: 'constructor#pmdomPlacemark', hasBalloon : !!descr}
mark_<?=$count?>.description = descr;
gCollection.splice(<?=($count-1);?>, 0, mark_<?=$count?>
}
$('#town_<?=$count;?>').click(function(){
map.closeBalloon(
gCollection.get(<?=($count-1);?>).openBalloon(
return false;
}
}
</script>

$count меняется в цикле от 1 до 17
проблема в том, чтобы по клику на ссылку с идом
town_<?=$count;?> содержащую название города открывался соотв. балун.,
но на самом деле некоторые метки в коллекции как-будто
меняются местами - при клике на Вологду открывается
Екатеринбург и т. д. иногда происходит сдвиг,т.е. при клике на
город открывется следующий в списке; иногда все работает правильно, но чаще неправильно, чем правильно
подскажите плз что тут не так(3-й день мучаюсь)
ссылка на карту http://www.water-technics.ru/contacts/dealers/
6 комментариев
Подписаться на комментарии к посту

так и должно быть

ведь обработчики geocoder_{count}.Events.Load срабатывают не по порядку

то, что не по порядку это понятно

но в коде есть строчка

gCollection.splice(, 0, mark_);

т.е. каждая метка в обработчике добавляется в определенную ячейку коллекции с определенным номером $count-1, который не повторяется.

по идее хоть асинхронно, но метки должны быть правильно разложены по ячейкам, но этого не происходит

 

gCollection.get().openBalloon(); все равно не всегда открывает правильный балун

 

по идее хоть асинхронно, но метки должны быть правильно разложены по ячейкам, но этого не происходит

посмотрите как работает splice в javascript-массиве,

если вы добавляете элемент сплайсом в 5-й индекс,

а длина массива при этом 3, то он добавится на индекс 3

 

а длина массива при этом 3, то он добавится на индекс 3

т.е. после добавления на индекс 3

длина будет 4?

конечно,

массивы же индексируются с 0-ля

Понятно.

Спасибо большое, видимо в этом дело и было