Мне нужно сформировать карту следующим образом, метки делятся на две категории (район, медицинское учреждение). Сначало на карту выводятся метки районов. При выборе метки с районом текущие метки удаляются и прорисовываются метки медицинских учреждений относящихся к этому району. Любая метка содержит информацию которую нужно вывести в балун при выборе. Пример того что я уже сделал miac58.ru/maps_lpu Сейчас информацию меток региона я вывожу в хинт, что бы клик по метки использовать как событие для "открытия" региона. Я хочу сделать везде балун, а событие назначить на ссылку типа "Подробнее" в подвале балуна. Проблема в том что я не увижу объекты из события onclick ссылки. Ознакомившись с документацией, с примерами я вроде понял что мне нужно описать шаблон балуна а там я смогу описать событие клика по ссылке. Правильно? Вот этим примером я пользовался. У меня не получается( Помогите.
var myMap; var his, hisZoom, hisCenter; var listBoxControl; ymaps.ready( function (){ myMap = new ymaps.Map ( "map",{ center: [53.19, 44.43], zoom: 8, controls: ['zoomControl', 'typeSelector', 'fullscreenControl'] } ); var MyBalloonLayout = ymaps.templateLayoutFactory.createClass( '<div class="popover top">' + '<a class="more" href="#">Подробнее</a>' + '<div class="arrow"></div>' + '<div class="popover-inner">' + '$[[options.contentLayout observeSize minWidth=235 maxWidth=235 maxHeight=350]]' + '</div>' + '</div>' , { build: function () { this.constructor.superclass.build.call(this); this._$element = $('.popover', this.getParentElement()); this.applyElementOffset(); this._$element.find('.more') .on('click', $.proxy(this.onMoreClick, this)); }, onSublayoutSizeChange: function () { MyBalloonLayout.superclass.onSublayoutSizeChange.apply(this, arguments); if(!this._isElement(this._$element)) { return; } this.applyElementOffset(); this.events.fire('shapechange'); }, applyElementOffset: function () { this._$element.css({ left: -(this._$element[0].offsetWidth / 2), top: -(this._$element[0].offsetHeight + this._$element.find('.arrow')[0].offsetHeight) }); }, onMoreClick: function (e) { alert('УРА!'); }, getShape: function () { if(!this._isElement(this._$element)) { return MyBalloonLayout.superclass.getShape.call(this); } var position = this._$element.position(); return new ymaps.shape.Rectangle(new ymaps.geometry.pixel.Rectangle([ [position.left, position.top], [ position.left + this._$element[0].offsetWidth, position.top + this._$element[0].offsetHeight + this._$element.find('.arrow')[0].offsetHeight ] ])); }, _isElement: function (element) { return element && element[0] && element.find('.arrow')[0]; } } ); var MyBalloonContentLayout = ymaps.templateLayoutFactory.createClass( '<h3 class="popover-title">$[properties.balloonContentHeader]</h3>' + '<div class="popover-content">$[properties.balloonContentBody]</div>' ); var objectManager = new ymaps.ObjectManager({geoObjectBalloonLayout: MyBalloonLayout, geoObjectBalloonContentLayout: MyBalloonContentLayout}); $.ajax({ url: "/maps_lpu/json" }).done(function(data) { objectManager.add(data); }); myMap.geoObjects.add(objectManager); button = new ymaps.control.Button({ data : { content : 'Назад', title : 'Назад' }, options : { visible: false } }); button.events.add('click', function () { button.options.set('visible', false); myMap.setCenter(hisCenter, hisZoom); objectManager.objects.removeAll(); objectManager.add(his); myMap.geoObjects.add(objectManager); }); myMap.controls.add(button, {float:'left'}) var myListBoxItems = []; //здесь вырезано заполнение списка (php) var listBoxItems = myListBoxItems.map(function(title) { return new ymaps.control.ListBoxItem({ data: { content: title }, state: { selected: true } }) }), // Теперь создадим список, содержащий 5 пунктов. listBoxControl = new ymaps.control.ListBox({ data: { content: 'Фильтр', title: 'Фильтр' }, items: listBoxItems, state: { // Признак, развернут ли список. expanded: false, filters: listBoxItems.reduce(function(filters, filter) { filters[filter.data.get('content')] = filter.isSelected(); return filters; }, {}) } }); myMap.controls.add(listBoxControl); // Добавим отслеживание изменения признака, выбран ли пункт списка. listBoxControl.events.add(['select', 'deselect'], function(e) { var listBoxItem = e.get('target'); var filters = ymaps.util.extend({}, listBoxControl.state.get('filters')); filters[listBoxItem.data.get('content')] = listBoxItem.isSelected(); listBoxControl.state.set('filters', filters); }); var filterMonitor = new ymaps.Monitor(listBoxControl.state); filterMonitor.add('filters', function(filters) { // Применим фильтр. objectManager.setFilter(getFilterFunction(filters)); }); function getFilterFunction(categories){ return function(obj){ var content = obj.properties.typeTitle; return categories[content] } } });