YMapComplexEntity

ComplexEntity — cущность, которая может содержать в себе дочерние компоненты, но методы для добавления и удаления в поддерево являются внутренними.

В модуле ymaps3 существует абстрактный класс YMapComplexEntity, который наследуется от YMapEntity, поэтому имеет все его свойства и методы. Также имеет дополнительные методы для работы с собственным поддеревом. Создать компонент сущности типа Complex Entity можно с помощью наследования от класса YMapComplexEntity:

type YMapSomeLayerProps = {
  visible: boolean;
  source: string;
};

class YMapSomeLayer extends ymaps3.YMapComplexEntity<YMapSomeLayerProps> {
  private _dataSource?: YMapTileDataSource;
  private _layer?: YMapLayer;
  constructor(props: YMapSomeLayerProps) {
    super(props);
    const {source, visible} = this._props;
    // Создаем экземпляры дочерних сущностей.
    this._dataSource = new ymaps3.YMapTileDataSource({id: source});
    this._layer = new ymaps3.YMapLayer({source, type: 'ground'});
    // Добавляем дочерние сущности в собственное поддерево компонента.
    this.addChild(this._dataSource);
    if (visible) {
      this.addChild(this._layer);
    }
  }
  protected _onUpdate(propsDiff: Partial<YMapSomeLayerProps>): void {
    if (propsDiff.visible !== undefined) {
      // Удаляем или добавляем сущность в зависимости от значения visible.
      propsDiff.visible ? this.addChild(this._layer) : this.removeChild(this._layer);
    }
  }
}

В примере выше использовались методы для взаимодействия с собственным поддеревом. Метод addChild – добавляет стороннюю сущность в поддерево. Все дочерние сущности хранятся в массиве children, поэтому в качестве второго необязательного аргумента метод принимает порядковый номер на место которого добавится сущность в этот массив. Метод removeChild – удаляет дочернюю сущность из поддерева.

Для получения списка дочерних элементов существует readonly массив children.

Также конструктор класса YMapComplexEntity имеет второй необязательный аргумент options — объект со следующими свойствами:

  • children – массив дочерних сущностей, которые будут добавлены в поддерево сразу после инициализации экземпляра класса.
  • container – если true, то создает дочерний proxy-контейнер который будет содержать поддерево дочерних компонентов. По умолчанию proxy-контейнер не создается.

Подробнее про proxy-контейнеры рассказано в соответствующем разделе.

Предыдущая
Следующая