YMapEntity
Entity — базовая сущность, которая не может содержать собственное поддерево, но может быть добавлено к другой сущности.
В модуле ymaps3 существует абстрактный класс YMapEntity для того чтобы создавать компонент сущности типа Entity с помощью наследования от данного класса:
type YMapSomeEntityProps = {
name: string;
};
class YMapSomeEntity extends ymaps3.YMapEntity<YMapSomeEntityProps> {
public isAttached: boolean;
constructor(props: YMapSomeEntityProps) {
super(props);
this.isAttached = false;
// Дополнительные действия, которые могут быть выполнены в конструкторе класса.
}
protected _onAttach(): void {
this.isAttached = true;
// Дополнительные действия, которые могут быть выполнены при присоединении объекта.
}
// ...
}
Класс YMapEntity содержит различные protected методы для переопределения чтобы создавать обработчики события на различные события жизненного цикла сущности.
Методы _onAttach и _onDetach – обработчики вставки и удаления сущности из родительского поддерева соответственно:
class YMapSomeEntity extends ymaps3.YMapEntity<YMapSomeEntityProps> {
// При добавление сущности в родительское поддерево.
protected _onAttach(): void {
console.log('attach entity');
}
// При удалении сущности из родительского поддерева.
protected _onDetach(): void {
console.log('detach entity');
}
}
Каждая сущность может содержать собственные параметры в виде объекта со значениями. Конструктор класса принимает объект параметров первым аргументом. После создания компонента, свойства можно обновить через метод update, указав только обновленные значения (другие значения не изменятся). Чтобы получить актуальные значения параметров сущности есть свойство _props.
Метод _onUpdate – обработчик обновления параметров сущности через метод update. В качестве аргументов приходят значения параметров, которые обновили и старые значения параметров до обновления:
type YMapSomeEntityProps = {
visible: boolean;
};
class YMapSomeEntity extends ymaps3.YMapEntity<YMapSomeEntityProps> {
private _visible = false;
// Срабатывает при обновлении параметров сущности.
protected _onUpdate(propsDiff: Partial<YMapSomeEntityProps>, oldProps: YMapSomeEntityProps): void {
// Поскольку приходит разница параметров, то перед сохранением нового значения стоит проверить на undefined.
if (propsDiff.visible !== undefined) {
this._visible = propsDiff.visible;
}
// this._props будет содержать уже обновленные значения.
}
}
Экземпляр сущности YMapEntity также имеет ссылки на другие связанные сущности дерева. Чтобы получить экземпляр родительской сущности существует readonly свойство parent, которое возвращает сущность типа YMapComplexEntity. Аналогичное свойство root возвращает корневую сущность дерева YMap.