Answer the question
In order to leave comments, you need to log in
How to add tags to Yandex maps with a drop-down list of cities?
Hello, Can you please tell me how to insert labels for each city separately in this code? If it matters, then the site on ModX
ymaps.ready(init);
function init () {
var myMap = new ymaps.Map('map', {
center: [55.751574, 37.573856],
zoom: 9,
controls: []
}),
// Создадим собственный макет выпадающего списка.
ListBoxLayout = ymaps.templateLayoutFactory.createClass(
"<button id='my-listbox-header' class='btn btn-success dropdown-toggle' data-toggle='dropdown'>" +
"{{data.title}} <span class='caret'></span>" +
"</button>" +
// Этот элемент будет служить контейнером для элементов списка.
// В зависимости от того, свернут или развернут список, этот контейнер будет
// скрываться или показываться вместе с дочерними элементами.
"<ul id='my-listbox'" +
" class='dropdown-menu' role='menu' aria-labelledby='dropdownMenu'" +
" style='display: {% if state.expanded %}block{% else %}none{% endif %};'></ul>", {
build: function() {
// Вызываем метод build родительского класса перед выполнением
// дополнительных действий.
ListBoxLayout.superclass.build.call(this);
this.childContainerElement = $('#my-listbox').get(0);
// Генерируем специальное событие, оповещающее элемент управления
// о смене контейнера дочерних элементов.
this.events.fire('childcontainerchange', {
newChildContainerElement: this.childContainerElement,
oldChildContainerElement: null
});
},
// Переопределяем интерфейсный метод, возвращающий ссылку на
// контейнер дочерних элементов.
getChildContainerElement: function () {
return this.childContainerElement;
},
clear: function () {
// Заставим элемент управления перед очисткой макета
// откреплять дочерние элементы от родительского.
// Это защитит нас от неожиданных ошибок,
// связанных с уничтожением dom-элементов в ранних версиях ie.
this.events.fire('childcontainerchange', {
newChildContainerElement: null,
oldChildContainerElement: this.childContainerElement
});
this.childContainerElement = null;
// Вызываем метод clear родительского класса после выполнения
// дополнительных действий.
ListBoxLayout.superclass.clear.call(this);
}
}),
// Также создадим макет для отдельного элемента списка.
ListBoxItemLayout = ymaps.templateLayoutFactory.createClass(
"<li><a>{{data.content}}</a></li>"
),
// Создадим 2 пункта выпадающего списка
listBoxItems = [
new ymaps.control.ListBoxItem({
data: {
content: 'Москва',
center: [55.751574, 37.573856],
zoom: 9
}
}),
new ymaps.control.ListBoxItem({
data: {
content: 'Омск',
center: [54.990215, 73.365535],
zoom: 9
}
})
],
// Теперь создадим список, содержащий 2 пункта.
listBox = new ymaps.control.ListBox({
items: listBoxItems,
data: {
title: 'Выберите пункт'
},
options: {
// С помощью опций можно задать как макет непосредственно для списка,
layout: ListBoxLayout,
// так и макет для дочерних элементов списка. Для задания опций дочерних
// элементов через родительский элемент необходимо добавлять префикс
// 'item' к названиям опций.
itemLayout: ListBoxItemLayout
}
});
listBox.events.add('click', function (e) {
// Получаем ссылку на объект, по которому кликнули.
// События элементов списка пропагируются
// и их можно слушать на родительском элементе.
var item = e.get('target');
// Клик на заголовке выпадающего списка обрабатывать не надо.
if (item != listBox) {
myMap.setCenter(
item.data.get('center'),
item.data.get('zoom')
);
}
});
myMap.controls.add(listBox, {float: 'left'});
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question