Открыть ballon по клику на внешней ссылке

146
26 апреля 2018, 09:51

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
 
//Клик по div после которого должен открыться балун и отцентрироваться позиция 
$('.contacts-map-link').click(function() 
{ 
  var geo_adres = $(this).attr('attr-geo'); 
  var myMap = init(geo_adres, 1); 
  FirstMetka(geo_adres, myMap); 
}); 
 
function init(geo_adres, my_map = false) 
		{ 
			myMap = new ymaps.Map('map_append_yandex',  
			{ 
				center: [55.753994, 37.622093], 
				zoom: 16 
			}); 
			 
			myCollection = new ymaps.GeoObjectCollection();	 
			 
			if(my_map) 
			{ 
				return myMap; 
			} 
			else 
			{ 
				ymaps.geocode(geo_adres,  
				{ 
					results: 1 
				}). 
				then(function (res, geo_code)  
				{ 
					var firstGeoObject = res.geoObjects.get(0), 
					coords = firstGeoObject.geometry.getCoordinates(), 
					bounds = firstGeoObject.properties.get('boundedBy'); 
					firstGeoObject.options.set('preset', 'islands#darkBlueDotIconWithCaption'); 
					firstGeoObject.properties.set('iconCaption', firstGeoObject.getAddressLine()); 
					myMap.geoObjects.add(firstGeoObject); 
					myMap.setBounds(bounds,  
					{ 
						checkZoomRange: true 
					}); 
				}); 
			} 
		} 
 
function FirstMetka(geo_adres, myMap) 
{ 
    myMap.firstGeoObject.balloon.open(); 
} 
</script>
<div attr-geo="г. Тула, ул. Сойфера, д. 6" class="contacts-map-link"  rel="nofollow"> Перейти на сойфера </div>

Возвращенный "myMap" почему-то не является экземпляром пространства ymaps.Map. Подскажите как решить проблему. В перспективе у меня будет ObjectCollection() Т.е несколько гео-объектов

Answer 1

https://jsfiddle.net/nqsxbf1o/ - рабочий пример

ymaps.ready(function () {
    //Клик по div после которого должен открыться балун и отцентрироваться позиция
    $('.contacts-map-link').click(function() {
    var geo_adres = $(this).attr('attr-geo');
      var myMap = createMap();
    getGeocodeReq(myMap, geo_adres).then(function () {
        createFirstMetka(myMap, geo_adres);
    });
    });
});
function getGeocodeReq(myMap, geo_adres) {
    return ymaps.geocode(geo_adres, {
                results: 1
    }).then(function (res, geo_code) {
        var firstGeoObject = res.geoObjects.get(0),
        coords = firstGeoObject.geometry.getCoordinates(),
        bounds = firstGeoObject.properties.get('boundedBy');                                          
    firstGeoObject.options.set('preset', 'islands#darkBlueDotIconWithCaption');
        firstGeoObject.properties.set('iconCaption', firstGeoObject.getAddressLine());
        myMap.geoObjects.add(firstGeoObject);
        myMap.setBounds(bounds, {
            checkZoomRange: true
        });
    });
}
function createMap() {
        return new ymaps.Map('map_append_yandex', {
            center: [55.753994, 37.622093],
      zoom: 16
    });
}
function createFirstMetka(myMap, geo_adres)
{   
    myMap.geoObjects.get(0).balloon.open();
}

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

READ ALSO
Замены в строке [дубликат]

Замены в строке [дубликат]

На данный вопрос уже ответили:

138
Проблема с Яндекс.Карты API 2.1 JS

Проблема с Яндекс.Карты API 2.1 JS

Пытаюсь сделать через Яндекс API, чтобы по введенному адересу определяло координаты пользователя, а после проверяло, входят ли эти координаты...

143
Проблемы с лишним местом после создания меню

Проблемы с лишним местом после создания меню

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

158
Reacr router modal

Reacr router modal

Скажите как я могу отобразить модальное окно /login над предыдущим роутом(например /home)

116