Клуб API Карт

Обращение к объектам не в пределах функции init()

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

Здравствуйте, хочу задать Вам такой вопрос:

Создал карту с метками:

 

ymaps.ready(init);
 
    function init() {
        var myMap = new ymaps.Map("map", {
                center: [43.248418, 76.90358],
                zoom: 11
            }),
            yellowCollection = new ymaps.GeoObjectCollection(null, {
                preset: 'islands#yellowIcon'
            }),
            blueCollection = new ymaps.GeoObjectCollection(null, {
                preset: 'islands#blueIcon'
            }),
            yellowCoords = [[43.238572, 76.893102], [43.221367, 76.850187]],
            blueCoords = [[43.205233, 76.885206], [43.259457, 76.938421]];

        for (var i = 0, l = yellowCoords.length; i < l; i++) {
            yellowCollection.add(new ymaps.Placemark(yellowCoords[i]));
        }
        for (var i = 0, l = blueCoords.length; i < l; i++) {
            blueCollection.add(new ymaps.Placemark(blueCoords[i]));
        }

        myMap.geoObjects.add(yellowCollection).add(blueCollection);

        // Через коллекции можно подписываться на события дочерних элементов.
        yellowCollection.get(0).events.add('click', function () { changeColor(1); });
        yellowCollection.get(1).events.add('click', function () { changeColor(2); });
        blueCollection.get(0).events.add('click', function () { changeColor(3); });
        blueCollection.get(1).events.add('click', function () { changeColor(4); });

        // Через коллекции можно задавать опции дочерним элементам.
        blueCollection.options.set('preset', 'islands#blueDotIcon');
        myMap.setBounds(myMap.geoObjects.getBounds());

    }

 

  

Теперь хочу к элементам blueCollection и yellowCollection обратиться из другой функции:

function showOnMap(index){
        blueCollection.get(index).options.set('preset', 'islands#redDotIcon');
    }

Но, у меня не получается. Я пытался  сделать эти объекты глобальными, но не смог.

1 комментарий
Владислав Турман
27 января 2016, 23:46

В вашей функции переменные объявлены через var и видны только в области видимости этой функции. Объявите их заранее или не используйте var для этих коллекций, если они нужны вам в глобальной области видимости (подробнее про область видимости лучше прочитать самому в книге по JavaScript). А так же првоеряйте, что такие переменные содержат в себе данные, перед тем как к ним обращаться, т.к. функция ymaps.ready будет вызвана только тогда, когда будет загружен и готов к работе Yandex Maps API.


P.S. проще говоря, myMap объявляйте как и было в функции init используя var и после ставьте точку с запятой.

а коллекции заранее перечислите: var blueCollection, yellowCollection; 

а в функции лишь присвойте им экземпляр geoObjectCollection (через точку с запятой, без var)