Клуб API Карт

ajax и метки на карте

Пост в архиве.

Смысл такой - для городского справочника сделана карта, где по разделам метками на карте отображаются организации: http://www.lytkarino.biz/map.html

Метки грузятся через xajax.

        $objResponse->assign("listing", "innerHTML", $listing);
        $objResponse->script($script);

Также внизу под картой хочу вывести список организаций, чтобы при нажатии на каждую - открывался ее баллун.

<a href=# onClick="placemark$id.openBalloon() ; return false;">

Но в ответ получаю: Ошибка: placemark1 is not defined
И оно понятно, т.к. скрипт отрисовки меток грузился через ajax.

Подскажите как победить это?

8 комментариев

после загрузки ajax'ом  ID маркеров - прописать еще и события для кнопок с нужными ID

Не понял события для каких кнопок? Если можно поподробней.

Не видит он то, что ajaxом загружено и все тут :(

Зешел, посмотрел на карте - так работает же все как и описано, клик по названию объекта - и открывается балун на карте.

А что если получить в массив список всех меток на карте, а потом уже открыть нужный баллун? Только вот как его получить?

Получилось сделать хитро, но работает (не знаю насколько это правильно):

            var placemark".$row['id']." = new YMaps.Placemark(new YMaps.GeoPoint($ll));
            map.placemark".$row['id']." = placemark".$row['id'].";

Глобальный map доступен всегда, поэтому все метки запихнул в него.

И теперь все открывается так:

$row['id'].".openBalloon(); return false;\">".$row['name']."

 

Можете кто-нибудь прокомментировать такой способ?

ужасно

можно получить ajax-ом js-массив данных

и сформировать из него метки и ссылки открывающие у них балун

 

например, от сервера приходит такое:

[

    {"name" : "точка1", "center" : "37.5,55.7"},

    {"name" : "точка2", "center" : "35.1,66.5"}

]

 

тогда, можно сделать так:

 

// в обработчике успешной загрузки ajax
success: function(json) {
    var menu = $('
    ').appendTo('body');
        $.each(json, function (i, point) {
            var pl = YMaps.Placemark(YMaps.GeoPoint.fromString(point.center)),
                  item = '
  • ' + point.name + '
  • ';
            map.addOverlay(pl);
            item
                .appendTo(menu)
                .bind('click', function(e) {
                    e.preventDefault();
                    pl.openBalloon();
                 });
        });
    }

надо конечно обернуть в вызов jQuery

item = $('

  • ' + point.name + '
  • ');

    А чем конкретно мой способ плох?

    Не люблю городить огородов, приплетать jQuery, несколько функций доплнительных, событий.. Ради чего?