Клуб API Карт

Открыть балун геообъекта

iormark
1 апреля 2014, 11:11

Здравствуйте, пример более точный не могу показать, потому что нету. Представьте есть карта, а с боку в табличке список адресов. На карте через ymaps.Clusterer выводится геообъект setGeoObjectPoint если кликаю на него все прекрасно впринцепе. Задача, кликая по табличке с боку по конкретному адресу выводить балун с инфой этого адреса, т.е принцип тот же, как будто я кликнул по геообъекту. Пока что я это сделал через balloon = map.balloon.open при этом он каждый раз заново создается.

 

Можно ли как то вызвать из вне, нужный балун, а не создавать каждый раз новый? Да и вообще из за этого приходится создавать лишний массив и при клике искать в массиве нужный обьект, и потом создавать новый балун, учитывая что все необходимое уже есть на карте(

 

function setGeoObjectPoint(value) {

        return new ymaps.GeoObject({

            geometry: {type: "Point", coordinates: value.coordinates},

            properties: {

                clusterCaption: value.name,

                balloonContentBody: value.desc+'<br><img src="' + value.photo + '">',

                body: '<img src="' + value.photo + '">',

                date: value.time

            }

        }, {

            balloonContentHeaderLayout: ymaps.templateLayoutFactory.

                    createClass('<div>$[properties.clusterCaption]</div>'),

            balloonContentBodyLayout: ymaps.templateLayoutFactory.

                    createClass('<div>$[properties.balloonContentBody]</div>'),

            balloonContentFooterLayout: ymaps.templateLayoutFactory.

                    createClass('<i>$[properties.date]</i>')

        });

    }

 

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

Посмотрите этот пример

Благодарю, решил как то так сделать мне кажется логично, однако не работает)

GeoObjects[0] = setGeoObjectPoint({...});

 

var query = ymaps.geoQuery(GeoObjects).

       search('properties.ID = 0');

query.each(function(pm) {

     pm.balloon.open(); // Cannot read property 'balloon' of null

}); 

 

Все что в bolloon

_Hi: [object Object]; _Ni: [object Object]; events: [object Object]; open: function (e){return this.capture(r.util.bind(function(t,n){if(!t){this._fh=n.events.group().add("open",o,this).add("close",u,this).add("destroy",a,this);var i=this._Hi.options.get("balloonDataSource");if(i)i(this._Hi,r.util.bind(h,this),e);else{var s=this._jh=this.calculatePixelPosition(e||this._Hi.getMap().getGlobalPixelCenter());s&&n.open(s)}}},this)),this._eh||null}; close: function (e){this._eh&&this._eh.destroy(e)}; isOpen: function (){return this._eh&&this._eh.isOpen()}; capture: function (e){this._Hi.getMap().balloon.capture(r.util.bind(function(t,n){t||(this._eh=n,n.options.setParent(this._Hi.options)),e(t,n)},this),{geometry:this._Hi.geometry,properties:this._Hi.properties,state:this._Hi.state,geoObject:this._Hi},{projection:r.projection.idle})}; calculatePixelPosition: function (e){var t=this._Hi.geometry.getPixelGeometry();return r.geoObject.balloonPositioner.storage.get(t.getType()).calculatePosition(t,e)};  

Однако не понятно, ведь balloon точно не null 

 

Благодарю, решил как то так сделать мне кажется логично, однако не работает)

Значит вы решили как то неправильно

Согласен, не понимаю почему первый пример не работал, сделал так

findGroupById = function(id) {

        var i = 0, group;

        while (group = GeoObjects[i++]) {

            if (group.properties.get('ID') === id) {

                return group;

            }

        }

        return null;

    }; 

    var r = findGroupById(ID);

    r.balloon.open();

Уважаемый Димик, если вам нечего ответить - не отвечайте тогда вообще. Какой смысл давать ссылки на треды, где обсуждается совершенно другое. :-)

Автор вопроса спрашивал - как открыть балун у элемента кластеризатора. 

У меня был аналогичный вопрос - как открыть балун у элемента ObjectManager'а. 

Перерыв всю документацию по API и обыскавшись в поисковике начал изучать ваше API методом тыка в консоли и обнаружил, что единственный способ открыть balloon у элемента ObjectManager - это вызвать метод самого ObjectManager.objects.baloon.open(id) и в качестве id передать айдишник требуемой точки.

Т.е. в случае вопроса iormark'a, по всей видимости, нужно сделать аналогичное, но у кластеризатора. 

Также, хочу призвать всех сотрудников Яндекса, занимающихся развитием и документированием Yandex Maps API сперва писать документацию для релиза, тестить свою же документацию на фокус-группе, а потом уже релизить новую версию APIшки. Иначе получается бардак и хаос, когда ВАША же функция возвращает координаты string'ами, а другая функция требует number'ы и, получая стринги, отправляет человека в Африку. o_O