Клуб API Карт

Как подгружать содержимое балуна?

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

Здравствуйте, я новичок в javaScript и вообще.

Суть проблемы:

На карте есть балун:  

              myPlacemark = new ymaps.Placemark([x, y], {
                   iconContent: 'Balloon',
                   balloonContentHeader: 'Header',
                   balloonContent: '<div id="test" style="width: 400px; height: 400px;"></div>',
               }

 Также есть вторая карта:  

      var myMaptest = new ymaps.Map("test", {
           center: [x, y],
           zoom: 5,
       });
   }

 

Вторая карта отображается в балуне, только если при загрузке страницы он уже открыт ( myPlacemark.balloon.open(); )

Если же балун закрыть и открыть снова, то карта отображаться не будет. Либо если по умолчанию оставить балун закрытым, то при открытии карта тоже будет не видна.

Как решить данную проблему?

 

p.s. Повторюсь, я новичок. Подозреваю, что надо копать в сторону AJAX для динамической подгрузки, прав ли я? В общем, подскажите, как правильно сделать или направьте на изучение необходимого материала.

p.p.s Код всего скрипта:

 

<script type="text/javascript">
ymaps.ready(init);
function init () {
       var myMap = new ymaps.Map("YMapsID", {
           center: [55.02, 82.90],
           zoom: 5,
           type: 'yandex#hybrid'
       });
       myPlacemark = new ymaps.Placemark([56.022788, 92.897815], {
           iconContent: 'Balloon',
           balloonContentHeader: Header',
           balloonContent: '<div id="test" style="width: 200px; height: 200px;"></div>',
       }, {
           preset: 'twirl#blueStretchyIcon'
       });
       myPlacemark.events.add('balloonopen', function () {
          myMapTest.container.fitToViewport();
       });
 
       myMap.geoObjects.add(myPlacemark);
       //myPlacemark.balloon.open();
       var myMapTest = new ymaps.Map("test", {
           center: [55.02, 82.90], 
           zoom: 5
       });
   }
</script>

 

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

myMap.container.fitToViewport();

Я так понял нужен обработчик события?

Сделал так: 

myPlacemark.events.add('balloonopen', function () {          myMapTest.container.fitToViewport();       });
Все равно не работает :(p.s. В первом посте привел весь скрипт.

как я понимаю myMapTest должен быть доступен отовсюду.

Попробуй в событие обычный alert() добавить и посмотри сработает вообще или нет.

А если не секрет зачем внутри карты показывать ещё одну карту ? Сколько не думал - не придумал для чего это может быть надо :)

alert то работает...

А карта по прежнему грузится только если раскомментировать //myPlacemark.balloon.open();

я вообщем тоже тут недавно так что могу и ошибаться, но мне думается, что на момент fitToViewport();

 либо ещё скрыт div с id="test", либо myMapTest по какой-то причине недоступен. Попробуй в консоли (F12 чаще всего) посмотреть что пишут или например в событии написать alert (myMapTest); и посмотреть что алерт даст. Местные гуру, как я понял, отмечают и до понедельника не работают. Сам ответа вразумительного жду со вчера :-)

Да, он не видит myMapTest. Пробовал перенести

var myMapTest = new ymaps.Map("test", {           center: [55.02, 82.90],            zoom: 5       });

 наверх функции, тогда вообще основная карта не запускается.

ИМХО надо вынести определение ЗА функцию что бы было доступно из любой функции. Или передавать ссылку на объект в параметрах

div id="test" будет доступен только после открытия балуна, поэтому и карту надо создавать в обработчике события balloonopen

Спасибо, все получилось!