Клуб API Карт

не меняется значение балуна

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

Всем привет! Недавно занимаюсь картами и столкнулся с такой проблемой. Балуны у меня кладутся в коллекцию и на них вешаются события baloonopen в котором меняется содержимое балуна. Так вот когда событие срабатывает то балун открывается со старым значением, но его боди меняется после открытия. Я делаю загрузку данных балуна по ajax и не получается обновить его содержимое. В чем может быть проблема ? Пример динамической загрузки балуна я видел и запускал, работает, а мой код не хочет, в чем может быть проблема ? Есть какой-нибудь реальный  пример загрузки данных аяксом, кликаешь, он загружает и показывает балун ? Только пример с работой в коллекции

 

 

var myMap;

ymaps.ready(function(){

  myMap = new ymaps.Map("map", {

      center: [55.160283, 51.40],

      zoom: 10,

      controls: ['zoomControl',  'fullscreenControl']

  });

});

 

 

function buildMarkers(markers) {

    ymaps.ready(function(){

 

      var collection = new ymaps.GeoObjectCollection();

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

        var marker = markers[i];

        var flat = new ymaps.Placemark(

              [marker[1], marker[0]],

              {

                balloonContent: "balloon!"

              },

              {

                iconLayout: 'default#image',

                //preset: 'islands#circleIcon',

                //iconColor: '#0088cf',

                hideIconOnBalloonOpen: false,

                iconImageHref: "pin.png",

                iconImageSize: [32, 32],

                iconImageOffset: [-16, -16],

                openEmptyBalloon: true,

                openBalloonOnClick: false

              }

        )

        flat.events.add('mouseenter', function (e) {

                e.get('target') // myPlacemark

                    .options.set('iconImageHref', "pin_hover.png");

        });

 

        flat.events.add('mouseleave', function (e) {

            e.get('target') // myPlacemark

                .options.set('iconImageHref', "pin.png");

        });

 

        flat.events.add('balloonopen', function (e) {

         // тут я меняю контент балуна! Он меняется, но открывается со старым значением!

          flat.properties.set('balloonContent', 'new body!');

        });

        collection.add(flat);

      }

      myMap.geoObjects.add(collection);

    });

  }

 

 

1 комментарий

Вы в цикле создаете премененную flat, и так же в цикле вешаете обработчики (что в общем то неправильно, есть же делегирование событий)

Кокретно тут "flat" во время срабатывания обработчика будет указывать на последний flat на момент выхода из цикла

 

// тут я меняю контент балуна! Он меняется, но открывается со старым значением!

          flat.properties.set('balloonContent', 'new body!');