Клуб API Карт

Что происходит при вызове метода myMap.geoObjects.add(myCollection); повторно?

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

Друзья, приветствую.

У меня, в зависимости от от зума карты, отображаются одна или вторая коллекция меток. Это реализовано довольно простым условием:

myMap.events.add('boundschange',  function (e) {
   if(e.get('newZoom')>=10){
myMap.geoObjects.remove(cityCollection);
myMap.geoObjects.add(shopCollection);
}
else{
myMap.geoObjects.remove(shopCollection);
myMap.geoObjects.add(cityCollection);
}
});

Так вот, если у меня изменяется зум карты и каждый раз значения зума больше 10, то вызывается метод добавления коллекции shopCollection. И мне интересно, что делает карта, если у меня эта коллекция уже отображается? 

 

Так же буду очень признателен мудрому совету, как проверить добавлена ли коллекция на карту.

5 комментариев
Евгений Белоусов
28 января 2016, 03:41

Я заметил, что при повторном вызове map.geoObject.add объект на карте не дублируестся.

 

В опциях геообъекта есть параметр visible, с помощью которого можно показывать/прятать, и естественно проверить отображена коллекция или нет

Евгений, спасибо за совет.

Буду вам признателен, если подскажие, как получить значение опции геообъекта.

Я делаю так console.log(shopCollection.options.get('visible')); и мне возвращается undefined

Рекомендую прочитать про опции и их наследование

В кратце - если никто эту

опцию не выставил, там может быть либо undefined, либо какое-то значение взятое из метаопций карты (в случае если коллекция на карту добавлена)

Я дам вам мудрый совет - читайте документацию.

В самом верху у каждого класса есть такие строчки

 

Расширяет IGeoObjectIMapObjectCollection.

Если кликнуть на эти ссылки и далее глубже пройтись по интерфейсам, которые реализует класс, то не трудно догадаться что коллекции реализуют интерфейс IParentOnMap, т.е. при добавлении коллекции (или геообъекта) в другую коллекцию вы просто меняете ей родителя (при этом она будет автоматически удалена из другой коллекции-родителя, если была в него добавлена)

т.е. код

CollectionA.add(CollectionB)

аналогичен такому

CollectionB.setParent(CollectionA)

 

Откуда также следует что повторное добавление одной коллекции в другую ничего не изменит

А также следует что проверить добавлена ли коллекция на карту можно так:

shopCollection.getParent() === myMap.geoObjects

 

Спасибо.