5 845 [GA] BattleFrame Разработчик, Коллекционер 3 874 публикации 24 467 боёв Жалоба #1 Опубликовано: 23 окт 2024, 07:42:01 Smart Datahub Представлен в UB2 следующими типами данных: dh, dhEntity, dhComponent и dhCollection. Обеспечивает возможность автоматически подписываться на события и тонко настраивать взаимодействие с ними. 1. Автоматическая подписка Одна из основных особенностей Smart Datahub - возможность автоматически подписываться на распространённые события, такие как collection.evChildAdded и collection.evChildRemoved, к примеру. По умолчанию она ВКЛЮЧЕНА! Не забывайте выключать её в местах, где она не нужна. Для того чтобы отключить автоподписку, достаточно прописать autoUpdate=false в биндинге (по аналогии с (watch=true) или (init=true)). Тогда никаких подписок создано не будет и биндинг будет работать только с событиями, прописанными вручную. Пример: (scope (var myEntity:dhComponent= "getSingleComponent(CC.testComponent)" autoUpdate=false) ) Список ивентов, на которые автоматически подписываются методы: Скрытый текст Метод Возвращаемый тип Описание Подписки на события при autoUpdate = "true" getSingleEntity dhEntity Получить первую сущность из подколлекции с указанным classId и путём - Если подколлеция ещё не существует: baseCollection.evСhildAdded - Если подколлеция уже существует: baseCollection.evСhildRemoved - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) getCollectionByPath dhCollection Получить подколлекцию по classId и пути (уникальному идентификатору подколлекции) - Если подколлеция ещё не существует: baseCollection.evСhildAdded - Если подколлеция уже существует: baseCollection.evСhildRemoved getSingleComponent dhComponent Получить первую сущность из коллекции и взять соответствующую компоненту - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) - entity.evAdded (если компоненты ещё нет) - entity.evRemoved (если компонента уже есть) getPrimaryComponent dhComponent Получить сущность из коллекции по первичному ключу и взять соответствующую компоненту - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) - entity.evAdded (если компоненты ещё нет) - entity.evRemoved (если компонента уже есть) getPrimaryEntity dhEntity Получить сущность из коллекции по первичному ключу - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) getPrimaryCompositeEntity dhEntity Конкатенировать параметры в первичный ключ и получить сущность по этому ключу из коллекции - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) getSingleEntity dhEntity Получить первую сущность из коллекции с указанным classId - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) getEntity dhEntity Получить сущность по id getCollection dhCollection Получить коллекцию по classId 2. Типы данных 2.1 Entity object Сущности (Entities) хранятся в коллекциях (Collections), а также могут быть получены по идентификатору из объекта datahub. В Smart datahub сущности имеют тип dhEntity. Вы можете получить доступ к компонентам объекта с синтаксисом .dot, то есть: (var myAutoEntity:dhEntity = "getPrimaryEntity(CC.test, 'id')") (var myComponent:dhComponent = "myAutoEntity.test") Сущности имеют два события: evAdded - вызывается при добавлении компонента в сущность. Автоматическая подписка по переменным. evRemoved - вызывается при удалении компонента из сущности. Автоматическая подписка по переменным. Примеры: (var waveHitDanger:dhComponent = "entity.waveHitDanger" autoUpdate=false (event "entity.evAdded")) (var diplomacyRelationComponent:dhComponent = "entity.diplomacyRelation" autoUpdate=false (event "entity.evAdded") (event "entity.evRemoved")) Список ивентов, на которые автоматически подписываются методы: Скрытый текст Метод Возвращаемый тип Описание Подписки на события при autoUpdate = "true" .component dhComponent Получить компоненту нужного класса - entity.evAdded (если компоненты ещё нет) - entity.evRemoved (если компонента уже есть) getComponent dhComponent Получить компоненту нужного класса по classId - entity.evAdded (если компоненты ещё нет) - entity.evRemoved (если компонента уже есть) hasComponent bool Проверить, есть ли компонента нужного класса в сущности - entity.evAdded (если компоненты ещё нет) - entity.evRemoved (если компонента уже есть) 2.2 Collection object Коллекция - это набор сущностей, которые имеют общий компонент. Коллекции и компоненты очень близки, но коллекция содержит только сущности и не содержит никаких свойств. В Smart datahub коллекции имеют тип dhCollection. Использование коллекций: getCollection(CC.someComponentName) - возвращает коллекцию сущностей, содержащих указанный компонент. (var markersCollection:dhCollection = "$datahub.getCollection(CC.worldMarker)") getChildByPath('collectionName') - дает доступ к подколлекциям по их имени. (var visibleDangers:dhCollection = "getCollection(CC.visibleDanger)") (var searchPointCol:dhCollection = "visibleDangers.getChildByPath('submarineSearchPoints')") firstEntity() - позволяет получить первую сущность, включающую в себя указанный компонент (подходит для использования, если в коллекции только один элемент (getSingleEntity), или если нужно взять любой элемент) (var visibleDangers:dhCollection = "getCollection(CC.visibleDanger)") (var firstVisibleDanger:dhEntity = "visibleDangers.firstEntity()") События коллекций: evAdded - Вызывается при добавлении объекта в коллекцию. Автоматическая подписка по переменным. (var diplomacyRelationCollection:dhCollection = "getCollection(CC.diplomacyRelation)") (vardiplomacyRelationComponent:dhComponent = "entity.diplomacyRelationComponent" autoUpdate=false (event "diplomacyRelationCollection.evAdded")) evRemoved - Вызывается при удалении объекта из коллекции. Автоматическая подписка по переменным. (var diplomacyRelationCollection:dhCollection = "getCollection(CC.diplomacyRelation)") (var diplomacyRelationComponent:dhComponent = "entity.diplomacyRelation" autoUpdate=false (event "diplomacyRelationCollection.evAdded") (event "diplomacyRelationCollection.evRemoved")) evUpdated - Сортированная коллекция - это тип коллекции, компоненты которой организованы в определенном порядке. Во всех остальных аспектах это обычная коллекция. Вызывается при обновлении сортировки. Автоматическая подписка по переменным. (var itemsList:array = "col.items" autoUpdate=false (event "col.evUpdated")) evChildAdded - Вызывается при добавлении дочерней коллекции. (var realPlayersCollection:dhCollection = "collection.getChildByPath('realPlayers')" autoUpdate=false(event "collection.evChildAdded") (event "collection.evChildRemoved")) evChildRemoved - Вызывается при удалении дочерней коллекции. (var allyCollection:dhCollection = "collection ? collection.getChildByPath('team.ally.alive') : null" autoUpdate=false(event "collection.evChildAdded") (event "collection.evChildRemoved")) Список ивентов, на которые автоматически подписываются методы: Скрытый текст Метод Возвращаемый тип Описание Подписки на события при autoUpdate = "true" collection[index] dhEntity Получить сущность по индексу - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) collection.length Number Получить размер коллекции - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) collection.items Array[GFX] Получить массив элементов коллекции.Deprecated! Метод всё ещё доступен, но имеются планы по его упразднению! getEntityByKey dhEntity Получить из коллекции сущность по первичному ключу - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) getEntityAtIndex dhEntity Получить сущность по индексу - baseCollection.evAdded (для всех кроме сортинга) - baseCollection.evRemoved (для всех кроме сортинга) - baseCollection.evUpdated (для сортинга) child dhCollection Получить дочернюю коллекцию по id - Если подколлеция ещё не существует: baseCollection.evСhildAdded - Если подколлеция уже существует: baseCollection.evСhildRemoved getChildByPath dhCollection Получить дочернюю коллекцию по пути - Если подколлеция ещё не существует: baseCollection.evСhildAdded - Если подколлеция уже существует: baseCollection.evСhildRemoved hasChildByPath dhCollection Проверить наличие дочерней коллекции по пути - Если подколлеция ещё не существует: baseCollection.evСhildAdded - Если подколлеция уже существует: baseCollection.evСhildRemoved getFullPath String Получить полный путь к коллекции. 2.3 Component object Компоненты - это объекты, содержащие реальные данные. Вы можете получить доступ к свойствам компонента с помощью синтаксиса .dot: (var myEntity:dhEntity = "getEntity(123)") (var goodComponent:dhComponent = "myEntity.goodComponent") (var propertyOfGoodComponent:int = "goodComponent.someProperty") Любое арифметическое действие при участии null вернет результат null. #Рассмотрим ситуацию, когда элемент существует, а какой-то энтити или компонента нет. (scope # Здесь в ownCarrierComponent будет записан Null, если мы не на авианосцк или гибриде с авиагруппой (var ownCarrierComponent:dhComponent = "getSingleComponent(CC.aircarrier)") #Даже если ownCarrierComponent будет Null, то выражение ownCarrierComponent.activeSquadron тоже вернёт Null #Также вместо полноценного тернарника можно использовать сокращённую форму (var activeSquadron:number = "ownCarrierComponent.activeSquadron ?: ActiveSquadron.NONE" (event "ownCarrierComponent.evStateChanged")) 2 Рассказать о публикации Ссылка на публикацию