class Types/entity:Model

Абстрактная модель.

Модели обеспечивают доступ к данным и поведению объектов предметной области (сущностям).

Такими сущностями могут быть, например, товары, пользователи, документы - и другие предметы окружающего мира, которые вы моделируете в своем приложении.

class Types/_entity/Model<T>

Примечание

В основе абстрактной модели лежит запись.

Основные аспекты модели (дополнительно к аспектам записи):

Поведенческие аспекты каждой сущности реализуются ее прикладным модулем в виде публичных методов.

Прикладные модели могут внедряться в порождающие их объекты, такие как источники данных или рекордсеты.

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

Для корректной сериализации и клонирования моделей необходимо выносить их в отдельные модули и указывать имя модуля в свойстве _moduleName каждого наследника:

    //My/Awesome/Model.ts
    import {Model} from 'Types/entity';
    export default class AwesomeModel extends Model {
        protected _moduleName: string = 'My/Awesome/Model';
        //...
    });

    return AwesomeModel;

Определим модель пользователя:

    //My/Awesome/Model.ts
    import {Salt} from 'Application/Lib';
    import {Model, format} from 'Types/entity';

   export default class User extends Model{
      protected _$format: format.FormatDeclaration = [
         {name: 'login', type: 'string'},
         {name: 'salt', type: 'string'}
      ];
      protected _$keyProperty: string = 'login';
      authenticate(password: string): boolean {
         return Salt.encode(this.get('login') + ':' + password) === this.get('salt');
      }
    });

Создадим модель пользователя:

    //Application/Controller/Test/Auth.ts
    import User from 'Application/Model/User';

    const user = new User();
    user.set({
        login: 'i.c.wiener',
        salt: 'grhS2Nys345fsSW3mL9'
    });
    const testOk = user.authenticate('its pizza time!');

Модели могут объединяться по принципу "матрёшки" - сырыми данными одной модели является другая модель. Для организации такой структуры следует использовать адаптер рекордсета:

    import {Model, adapter} from 'Types/entity';

    class MyEngine extends Model {
        protected _$properties = {
            fuelType: {
                get() {
                    return 'Diesel';
                }
            }
        }
    }

    class MyTransmission extends Model {
        protected _$properties = {
            transmissionType: {
                get() {
                    return 'Manual';
                }
            }
        }
    }

    const myCar = new MyEngine({
        rawData: new MyTransmission({
            rawData: {
                color: 'Red',
                fuelType: '',
                transmissionType: ''
            }
        }),
        adapter: new adapter.RecordSet()
    });

    console.log(myCar.get('fuelType')); // 'Diesel'
    console.log(myCar.get('transmissionType')); // 'Manual'
    console.log(myCar.get('color')); // 'Red'

Опции

adapterprotected

Адаптер, обеспечивающий доступ к необработанным данным определенного формата. По умолчанию поддерживаются необработанные данные в формате Types/entity:adapter.Json.

FormattableMixin
cacheModeprotected

Режим кеширования (по умолчанию - только объекты)

Record
cloneChangedprotected

Клонировать значения полей, поддерживающих интерфейс Types/entity:ICloneable, и при вызове rejectChages восстанавливать клонированные значения.

Record
formatprotected

{Types/_collection/format/Format|

Array.|

Object.|

Object.|

Object.|

Object.

} Формат полей. Это может быть либо полный формат (в этом случае он должен быть определен как массив или экземпляр класса Format), либо как частичный формат (в этом случае он должен быть определен как простой объект).

FormattableMixin
keyPropertyprotected

Название свойства, содержащего первичный ключ

ownerprotected

Рекордсет, которому принадлежит запись

Record
propertiesprotected

Описание собственных свойств модели. Дополняет/уточняет свойства, уже существующие в сырых данных.

rawDataprotected

Данные в необработанном формате, которые могут быть распознаны через определенный адаптер.

FormattableMixin
stateprotected

Текущее состояние записи по отношению к рекордсету: отражает факт принадлежности записи к рекордсету и сценарий, в результате которого эта принадлежность была сформирована.

Record
versionCallbackprotected

Обработчик изменения версии

VersionableMixin

Поля

deepChangedPropertiesprotected

Имена свойств и значения, которые были затронуты во время вызовов рекурсивного метода set().

defaultPropertiesValuesprotected

Значения по умолчанию для вычисляемых свойств.

isChangedprotected

Модель изменена.

isDeletedprotected

Модель удалена в источнике данных, из которого она взята.

propertiesDependencyprotected

Карта зависимостей свойств, такая как 'имя свойства' -> ['имена свойств, которые зависят от этого']

propertiesDependencyGatheringprotected

Имя свойства, для которого сейчас собираются зависимости.

propertiesInjectedprotected

Свойства задаются через параметры конструктора.

instanceIdprotected

Уникальный идентификатор

InstantiableMixin
instancePrefixprotected

Префикс значений идентификатора

InstantiableMixin
acceptedStateprotected

Состояние записи после последнего вызова acceptChanges

Record
changedFieldsprotected

Данные об измененных полях

Record
fieldsCacheprotected

Объект содержащий закэшированные значения полей

Record
fieldsCloneprotected

Объект содержащий клонированные значения полей

Record
beforeRaiseOffprotected

Состояние коллекции до выключения генерации событий

EventRaisingMixin
blockChangesMessageprotected

Сообщение для режима блокировки изменений

EventRaisingMixin
sessionItemContentsGetterprotected

Метод получения содержимого элемента коллекции (если такое поведение поддерживается)

EventRaisingMixin
destroyed

Экземпляр был разрушен

DestroyableMixin
cowprotected

Работа с необработанными данными в режиме Copy-On-Write.

FormattableMixin
formatprotected

Окончательно построенный формат.

FormattableMixin
formatCloneprotected

Копия _format, которая используется для кэширования в getFormat()

FormattableMixin
formatUnlinkedprotected

Значение _$format не связано с исходным значением.

FormattableMixin
rawDataAdapterprotected

Экземпляр адаптера для работы с необработанными данными.

FormattableMixin
rawDataFieldsprotected

Список имен полей, взятых из адаптера необработанных данных.

FormattableMixin
_mediator

Медиатор, отвечающий за связи между сущностями

ManyToManyMixin
eventBusChannelprotected

Канал событий

ObservableMixin
eventsQueueprotected

Очередь событий

ObservableMixin
publishedEventsprotected

Декларированные события

ObservableMixin
optionsdeprecatedprotected
ReadWriteMixin
getOptionsprotected

Метод реализован в OptionsToPropertyMixin.

SerializableMixin
instanceNumberprotected

Уникальный номер инстанса

SerializableMixin
moduleNameprotected

Название класса-конструктора.

SerializableMixin

Методы

_addChildprotected

Добавляет отношение с другой сущностью

ManyToManyMixin
_addRawDataFieldprotected

Добавляет поле в _rawDataFields.

FormattableMixin
_analizeUpdateSessionprotected

Анализирует серию обновлений, генерирует события об изменениях

EventRaisingMixin
_buildFieldprotected

Создает формат поля по его описанию.

FormattableMixin
_buildFormatprotected

Строит формат по описанию.

FormattableMixin
_checkAdapterCompatibilityprotected

Проверяет совместимость адаптеров.

FormattableMixin
_checkErrorsprotected

Проверяет наличие ошибок

Record
_checkFormatIsWritableprotected

Проверяет, что формат записи доступен для записи

Record
_checkModuleNameprotected

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

SerializableMixin
_childChangedprotected

Рекурсивно уведомляет родительские сущности об изменении дочерней

ManyToManyMixin
_clearChangedFieldsprotected

Очищает информацию об измененных полях

Record
_clearFieldsCacheprotected

Обнуляет кэш значений полей

Record
_clearFormatprotected

Очищает формат полей. Это работает, только если формат не был объявлен.

FormattableMixin
_clearFormatCloneprotected

Очизает _formatClone.

FormattableMixin
_createMediatorprotected

Создает посредника для установления отношений с детьми

ManyToManyMixin
_createRawDataAdapterprotected

Создает адаптер для сырых данных

Record
_deleteDependencyCacheprotected

Удаляет закешированное значение для свойства и всех от него зависимых свойств

_extractPacksByListprotected

Разбивает элементы списка на пачки в порядке их следования в списке.

EventRaisingMixin
_finishUpdateSessionprotected

Завершает серию обновлений

EventRaisingMixin
_getAdapterprotected

Возвращает общий экземпляр адаптера.

FormattableMixin
_getAllPropertiesprotected

Возвращает массив названий всех свойств (включая свойства в "сырых" данных)

_getChangedFieldValueprotected

Возвращает оригинальное значение измененного поля

Record
_getDefaultAdapterdeprecatedprotected

Возвращает адаптер по умолчанию, как это и должно быть.

FormattableMixin
_getFieldFormatprotected

Возвращает формат поля с указанным именем.

FormattableMixin
_getFieldTypeprotected

Возвращает тип поля по его формату.

FormattableMixin
_getFormatprotected

Возвращает формат поля.

FormattableMixin
_getHashMapprotected

Возвращает hash map

Record
_getMediatorprotected

Возвращает посредника для установления отношений с детьми

ManyToManyMixin
_getOptionsprotected

Возвращает опции объекта

OptionsToPropertyMixin
_getRawDataprotected

Возвращает необработанные данные из адаптера.

FormattableMixin
_getRawDataAdapterprotected

Возвращает экземпляр адаптера для определенного типа данных.

FormattableMixin
_getRawDataFieldsprotected

Возвращает список имен полей, взятых из адаптера необработанных данных.

FormattableMixin
_getRawDataFromOptionprotected

Возвращает исходные данные, введенные через параметр.

FormattableMixin
_getRawDataValueprotected

Возвращает значение поля из "сырых" данных, прогнанное через фабрику

Record
_getSerializableStateprotected

Возвращает всё, что нужно сложить в состояние объекта при сериализации, чтобы при десериализации вернуть его в это же состояние

SerializableMixin
_hasChangedFieldprotected

Возвращает признак наличия изменений в поле

Record
_hasFormatprotected

Псевдоним для hasDeclaredFormat().

FormattableMixin
_hasMediatorprotected

Возвращает признак наличия посредника

ManyToManyMixin
_hasSameMediatorprotected

Возвращает признак наличия одинакового посредника

ManyToManyMixin
_haveToCloneprotected

Возвращает режим работы с клонами значений, поддреживающих клонирование

Record
_initRawDataAdapterprotected

Инициализирует экземпляр адаптера.

FormattableMixin
_isFieldValueCacheableprotected

Возвращает признак, что значение поля кэшируемое

Record
_isNeedNotifyCollectionChangeprotected

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

EventRaisingMixin
_isNeedNotifyPropertyChangeprotected

Возвращает признак, что нужно генерировать события об изменении записи

Record
_isUnserializedprotected

Check if the instance was unserialized.

SerializableMixin
_notifyprotected

Извещает о наступлении события. Если в процессе извещения приходит очередное событие, то извещение о нем будет отправлено после выполнения обработчиков предыдущего.

ObservableMixin
_notifyChangeprotected

Уведомляет об изменении полей записи

Record
_notifyCollectionChangeprotected

Генерирует событие об изменении коллекции

EventRaisingMixin
_notifyLaterprotected

Ставит в очередь извещение о наступлении события.

ObservableMixin
_notifyPushQueueprotected

Добавляет извещение о событии в очередь.

ObservableMixin
_notifyQueueprotected

Инициирует выполнение обработчиков из очереди событий

ObservableMixin
_parentChangedprotected

Уведомляет дочерние сущности об изменении родительской

ManyToManyMixin
_processCalculatedValueprotected

Вычисляет/записывает значение свойства

_publishprotected

Деклариует наличие событий

ObservableMixin
_pushDependencyprotected

Добавляет зависимое свойство для текущего рассчитываемого

_pushDependencyForprotected

Добавляет зависимое свойство

_removeChildprotected

Удаляет отношение с другой сущностью

ManyToManyMixin
_removeFromQueueprotected

Удаляет из очереди все обработчики указанного события

ObservableMixin
_resetRawDataAdapterprotected

Сбрасывает экземпляр адаптера для определенного типа данных.

FormattableMixin
_resetRawDataFieldsprotected

Сбрасывает _rawDataFields.

FormattableMixin
_setChangedFieldprotected

Устанавливает признак изменения поля

Record
_setMediatorprotected

Устанавливает посредника для установления отношений с детьми

ManyToManyMixin
_setPairsprotected

Устанавливает значения полей из пар "новое значение => старое значение"

Record
_setRawDataValueprotected

Конвертирует значение поля через фабрику и сохраняет его в "сырых" данных

Record
_setSerializableStateprotected

Проверяет сериализованное состояние перед созданием инстанса. Возвращает метод, востанавливающий состояние объекта после создания инстанса.

SerializableMixin
_startUpdateSessionprotected

Запускает серию обновлений

EventRaisingMixin
_unlinkFormatOptionprotected

Разрыв связи _$format с исходным значением.

FormattableMixin
_unsetChangedFieldprotected

Снимает признак изменения поля

Record
acceptChanges

Подтверждает изменения состояния записи с момента предыдущего вызова acceptChanges():

  • Сбрасывает признак изменения для всех измененных полей;

  • Меняет state следующим образом:

    • Added или Changed становится Unchanged;
    • Deleted становится Detached;
    • остальные не меняются.

Если передан аргумент fields, то подтверждаются изменения только указанного набора полей. State в этом случае меняется только если fields включает в себя весь набор измененных полей.

Record
addField

Добавляет поле в формат.

FormattableMixin
addFieldToprotected

Добавляет поле в запись. Если формат не указан, то он строится по типу значения поля.

Record
clone

Создает новый объект, который являтся копией текущего экземпляра.

ICloneable
constructor

Конструктор объекта, принимающий набор опций в качестве первого аргумента

OptionsToPropertyMixin
destroy

Разрушает экземпляр

DestroyableMixin
detach

Отвязывает запись от рекордсета: сбрасывает ссылку на владельца и устанавливает состояние detached.

Record
each

Перебирает все свойства модели (включая имеющиеся в "сырых" данных)

extend
filter

Создает запись c набором полей, ограниченным фильтром.

Record
filterFieldsprotected

Создает запись c указанным набором полей

Record
fromJSON

Конструирует экземпляр класса из сериализованного состояния

SerializableMixin
fromObject

Создает запись по объекту c учетом типов значений полей. Поля добавляются в запись в алфавитном порядке.

Record
get

Возвращает значение свойства.

Если свойство не существует, возвращает undefined.

Если свойство является объектом, то всегда возвращается один и тот же объект (если он не был заменен через вызов метода set).

IObject
getAdapter

Возвращает адаптер для обработки необработанных данных.

FormattableMixin
getChanged

Возвращает массив названий измененных полей.

Record
getDefault

Возвращает значение свойства по умолчанию

getEnumerator

Возвращает энумератор для перебора названий свойств модели

getEventHandlers

Возвращет массив подписчиков на событие

ObservableMixin
getFormat

Возвращает формат поля в режиме "только для чтения".

FormattableMixin
getInstanceId

Возвращает уникальный идентификатор экземпляра класса.

IInstantiable
getKey

Возвращает значение первичного ключа модели

getKeyProperty

Возвращает название свойства, в котором хранится первичный ключ модели

getOwner

Возвращает рекордсет, которому принадлежит запись. Может не принадлежать рекордсету.

Record
getProperties

Возвращает описание свойств модели.

getRawData

Возвращает необработанные данные (клонирует, если есть объект).

FormattableMixin
getState

Возвращает текущее состояние записи.

Record
getVersion

Возвращает версию объекта.

Версия соответсвует некому состоянию объекта и меняется при измении как то значимых свойств объекта, например для рекорда это будет изменение значений полей.

IVersionable
has

Проверяет наличие свойства у объекта.

IObject
hasDeclaredFormat

Возвращает признак того, что формат был задан явно.

FormattableMixin
hasEventHandlers

Проверяет наличие подписки на событие

ObservableMixin
isChanged

Возвращает признак, что поле с указанным именем было изменено.

Если name не передано, то проверяет, что изменено хотя бы одно поле.

Record
isDestroyedprotected
DestroyableMixin
isEqual

Проверяет эквивалентность текущего объекта другому объекту.

IEquatable
merge

Объединяет модель с данными другой модели

rejectChanges

Возвращает запись к состоянию, в котором она была с момента последнего вызова acceptChanges:

  • Отменяются изменения всех полей;

  • State возвращается к состоянию, в котором он был сразу после вызова acceptChanges.

Если передан аргумент fields, то откатываются изменения только указанного набора полей. State в этом случае меняется только если fields включает в себя весь набор измененных полей.

Record
removeField

Удаляет поле из формата по его имени.

FormattableMixin
removeFieldAt

Удаляет поле из формата по его позиции.

FormattableMixin
resetDeclaredFormat

Обнуляет явно заданный формат.

FormattableMixin
set

Устанавливает значение свойства.

Если свойство только для чтения, генерирует исключение.

IObject
setKeyProperty

Устанавливает название свойства, в котором хранится первичный ключ модели

setRawData

Устанавливает необработанные данные.

FormattableMixin
setState

Устанавливает текущее состояние записи.

Record
subscribe

Добавляет подписку на событие

ObservableMixin
toJSON

Возвращает сериализованный экземпляр класса

SerializableMixin
toString

Возвращает значения всех свойств в виде строки формата json

Record
unsubscribe

Отменяет подписку на событие

ObservableMixin

События

onPropertyChange

После изменения набора свойств объекта.

IObservableObject

Тайпдефы

Property

FAQ

4/13/2021Мальцев А.А.