HTML:

<ya-template-layout ya-key="listBoxTemplate" ya-overrides="overList">
    <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="[if state.expanded]display:block[else]display:none[endif];">
    </ul>
</ya-template-layout>
<ya-template-layout ya-key="listBoxItemTemplate">
    <li><a>$[data.content]</a></li>
</ya-template-layout>
<ya-map ya-zoom="9" ya-center="[37.573856,55.751574]">
    <ya-toolbar ya-name="toolBar" ya-options="{left:5,top:5}">
        <ya-control ya-type="ListBox" ya-params="{data:{title: 'Выберите пункт'},items:[{data: {content: 'Москва',center: [37.573856,55.751574],zoom: 9}},{data: {content: 'Омск',center: [73.365535,54.990215],zoom: 9}}]}" ya-options="{layout:'listBoxTemplate',itemLayout:'listBoxItemTemplate'}"
                    ya-event-click="click($event)"></ya-control>
    </ya-toolbar>
</ya-map>

javascript

$scope.overList={
    build: function() {
        // Вызываем метод build родительского класса перед выполнением
        // дополнительных действий.
        var ListBoxLayout = templateLayoutFactory.get('listBoxTemplate');
        ListBoxLayout.superclass.build.call(this);

        this.childContainerElement = angular.element(document.getElementById('my-listbox'))[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 родительского класса после выполнения
        // дополнительных действий.
        var ListBoxLayout = templateLayoutFactory.get('listBoxTemplate');
        ListBoxLayout.superclass.clear.call(this);
    }
};
$scope.click = function(e){
    var item = e.get('target');
    if (item.data.get('title') != 'Выберите пункт') {
        var myMap = item.getMap();
        myMap.setCenter(
            item.data.get('center'),
            item.data.get('zoom')
        );
    }
};
  • $[data.content]