Клуб API Карт

Проблема с добавлением содержимого балуна. api 2.0

Константин
13 августа 2012, 09:38

не получается добавить содержимое балуна, подскажите пожалуйста способ решения.

 

  function changeCityOnMap(nameCity,addressNewCr){

  if(nameCity&&nameCity!=''){

   var myGeocoder = ymaps.geocode(nameCity,{json:true,results:1});

   myGeocoder.then(

    function (res) {

        cityToMap=(res.GeoObjectCollection.featureMember[0].GeoObject.Point.pos).split(" ");

        $('#map3').html("");

        var myMap = new ymaps.Map("map3", {

          center: [cityToMap[1], cityToMap[0]],

          zoom: 9

        });

        if(addressNewCr.length>0){

            for(i=0;i<(addressNewCr.length);i++){

                ballonContent=addressNewCr[i].ballon;

                var myGeocoder1 = ymaps.geocode(addressNewCr[i].address); 

                myGeocoder1.then(

                function (res2,i) {

                //console.dir(res2);

                var coords1=res2.geoObjects.get(0).geometry.getCoordinates();

                // Создаем метку и задаем изображение для ее иконки

                myPlacemark = new ymaps.Placemark(coords1, {

                  balloonContent: ballonContent

                }, {

                    iconImageHref: "/img/dot.png",

                    iconContent: (i+1),

                    hideIconOnBalloonOpen: false,

                    // Размеры содержимого балуна

                    balloonContentSize: [100, 100],

                    // Задаем макет балуна - пользовательская картинка с контентом

                    balloonLayout: "default#imageWithContent",

                    // Картинка балуна

                    //balloonImageHref: '',

                    // Смещение картинки балуна

                    balloonImageOffset: [70, -130],

                    // Размеры картинки балуна

                    balloonImageSize: [120, 100],

                    // Балун не имеет тени

                    balloonShadow: false

                    //iconImageSize: [30, 42], // размеры картинки

                    //iconImageOffset: [-3, -42] // смещение картинки

                });

                // Добавление метки на карту

                myMap.geoObjects.add(myPlacemark);

                });

            }

        }

        myMap.controls.add("mapTools");

        myMap.controls.add("zoomControl");

        myMap.controls.add("typeSelector");

    });   

  }

}

 

console.log(addressNewCr[i].ballon); возвращает данные которые необходимо вставить, 

8 комментариев
Подписаться на комментарии к посту

ballonContent - я что-то не вижу что вы сюда присвоили addressNewCr[i].ballon, ну или просто напишите

myPlacemark = new ymaps.Placemark(coords1, {

                  balloonContent: ballonContent

  balloonContent: addressNewCr[i].ballon

                }


Константин
13 августа 2012, 12:05

извиняюсь, не полностью вставил код, исправил. в функцию приходит объект addressNewCr со списком адресов и контентом для балунов addressNewCr[n].address и addressNewCr[n].ballon соответственно

скиньте ссылочку на страницу, может так будет понятней.

balloonLayout: "default#imageWithContent",

этот макет "default#imageWithContent" предназначен для иконки и не смотрит в поле properties.balloonContent. Удалите эту строчку и все должно работать

Константин
13 августа 2012, 13:27

на сколько понял - проблема в части myGeocoder1.then как я понял - она асинхронная, при попытке вывода шага итерации (переменной i) он 5 раз выводит "5" - т.е. последний шаг итерации. соответственно и в ballon он для всех объектов выводит один и тот же контент, т.к. addressNewCr[i].ballon постоянно вызывается с ключем 5

 

это конечно так. ну а addressNewCr[5].ballon у вас выводится в балуне?

Константин
13 августа 2012, 13:46

да

Константин
13 августа 2012, 13:48

про "default#imageWithContent" спасибо, но он к сожалению ни чем не помог, просто весь функционал еще не дописал, споткнулся на содержимом балуна и засел на нем.