Клуб API Карт

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

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

У меня на карте (API 2.0) множество меток, которые объеденены в коллекцию, есть внешняя панель, на которой находятся ссылки. Как реализовать функциональность когда при клике на ссылку вне карты, будет открываться необходимый балун placemark'а, без перебора элементов в коллекции?

 

И еще, раньше у балуна был метод openbaloon, но во второй версии API его уже нет, а что вместо него реализваоно?

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

Посмотрите эту статью

сейчас вместо openbaloon используется  ваша_метка.balloon.open()

 

placemark = new ymaps.Placemark(geometry, {name: setOfMarkers[singeMarker].name});

 

placemark.balloon.open();

>> Uncaught TypeError: Cannot read property 'balloon' of null

А у вас что-то в балун метки записано?  можно ссылочку?

 

 

function getMarks(res) {var countOfMarkers = 0,placemark,geometry = [],placemarks = [],bounds = myMap.getBounds(),span = [bounds[1][0] - bounds[0][0], bounds[1][1] - bounds[0][1]];var setOfMarkers = JSON.parse(res);var ids = new Array();$('.right-companies').empty();var myBalloonLayout = ymaps.templateLayoutFactory.createClass($('#mapMarker').html());ymaps.layout.storage.add('my#superlayout', myBalloonLayout);for ( singeMarker in setOfMarkers )  {if (typeof setOfMarkers[singeMarker].name == "undefined")ids.push(setOfMarkers[singeMarker].id);else {$('.right-companies').append($('
  • ').append($('<a>').attr('href',setOfMarkers[singeMarker].url).text(setOfMarkers[singeMarker].name)).append($('ong>').text(setOfMarkers[singeMarker].rating)));
  • geometry = [setOfMarkers[singeMarker].latitude,setOfMarkers[singeMarker].longitude];placemark = new ymaps.Placemark(geometry, {name: setOfMarkers[singeMarker].name,url: setOfMarkers[singeMarker].url,rating: setOfMarkers[singeMarker].rating,});collection.add(placemark);myMap.geoObjects.each(function (geoObject) {if (geoObject.properties.get('id') == 'some id') {geoObject.balloon.open();return false;}})$('.right-companies').append($('
  • ').append(
  • $('')//.attr('href',setOfMarkers[singeMarker].url).text(setOfMarkers[singeMarker].name).click(function() {return false;})).append($('').text(setOfMarkers[singeMarker].rating)));}}ls.ajax(aRouter['map']+'ajax/markers/', {'ids': ids}, function(res) {});collection.options.set({balloonLayout:'my#superlayout',// Максимальная ширина балуна в пикселахballoonMaxWidth: 300,shadow : false});myMap.geoObjects.add(collection);}

    Если я делаю так: 

     

    $('.right-companies').append($('
  • ').append($('<a>').attr('href',setOfMarkers[singeMarker].url).text(setOfMarkers[singeMarker].name)).append($('ong>').text(setOfMarkers[singeMarker].rating)));
  • geometry = [setOfMarkers[singeMarker].latitude,setOfMarkers[singeMarker].longitude];placemark = new ymaps.Placemark(geometry, {name: setOfMarkers[singeMarker].name,url: setOfMarkers[singeMarker].url,rating: setOfMarkers[singeMarker].rating,});
    placemark.balloon.open();
    collection.add(placemark);

    То, ругается на Uncaught TypeError: Cannot read property 'balloon' of null

    ну я  могу ошибаться, но мне например не нравится у вашем коде 2 момента

    var myBalloonLayout = ymaps.templateLayoutFactory.createClass($[properties.name]);

     

    и попробуйте перебирать метки колекции а не все геообъекты карты тоесть

    collection.each(function (geoObject) {

    а вообще метки видно перед тем как вы пытаетесь открыть балун, может у Вас проблемма с асинхронностью?