class Types/entity:Model

<p>Абстрактная модель.</p><p>Модели обеспечивают доступ к данным и поведению объектов предметной области (сущностям).</p><p>Такими сущностями могут быть, например, товары, пользователи, документы - и другие предметы окружающего мира, которые вы моделируете в своем приложении.</p>

class Types/_entity/Model&lt;T&gt;

Примечание

<p>В основе абстрактной модели лежит <a class="link-tag" data-className="Types/entity/Record">запись</a>.</p><p>Основные аспекты модели (дополнительно к аспектам записи):</p><p><ul></p><p> <li>определение <a class="link-tag" data-className="Types/entity/Model" data-category="option" data-member="properties">собственных свойств</a> сущности;</li></p><p> <li><a class="link-tag" data-className="Types/entity/Model" data-category="option" data-member="keyProperty">уникальный идентификатор сущности</a> среди ей подобных.</li></p><p></ul></p><p></p><p>Поведенческие аспекты каждой сущности реализуются ее прикладным модулем в виде публичных методов.</p><p>Прикладные модели могут внедряться в порождающие их объекты, такие как <a class="link-tag" data-className="Types/source/Base">источники данных</a> или <a class="link-tag" data-className="Types/collection/RecordSet" data-category="option" data-member="model">рекордсеты</a>.</p><p></p><p>Для реализации конкретной модели используется наследование от абстрактной либо промежуточной.</p><p></p><p>Для корректной <a href="/doc/platform/developmentapl/interface-development/pattern-and-practice/serialization/#nota-bene">сериализации и клонирования</a> моделей необходимо выносить их в отдельные модули и указывать имя модуля в свойстве _moduleName каждого наследника:</p><pre> //My/Awesome/Model.ts import {Model} from 'Types/entity'; export default class AwesomeModel extends Model { protected _moduleName: string = 'My/Awesome/Model'; //... }); return AwesomeModel; <p></pre></p><p></p><p>Определим модель пользователя:</p><pre> //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'); } }); <p></pre></p><p>Создадим модель пользователя:</p><pre> //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!'); <p></pre></p><p></p><p>Модели могут объединяться по принципу "матрёшки" - сырыми данными одной модели является другая модель. Для организации такой структуры следует использовать <a class="link-tag" data-className="Types/entity/Model">адаптер рекордсета</a>:</p><pre> 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' <p></pre></p>

Опции

adapter
<p>Адаптер, обеспечивающий доступ к необработанным данным определенного формата. По умолчанию поддерживаются необработанные данные в формате <a class="link-tag" data-className="Types/entity/FormattableMixin">Types/entity:FormattableMixin</a>.</p>
cacheMode
<p>Режим кеширования</p>
cloneChanged
<p>Клонировать значения полей, поддерживающих интерфейс <a class="link-tag" data-className="Types/entity/ICloneable">Types/entity:ICloneable</a>, и при вызове rejectChages восстанавливать клонированные значения.</p>
format
<p>{Types/_collection/format/Format|</p><p>Array.<Types/_entity/format/fieldsFactory/FieldDeclaration.typedef>|</p><p>Object.<String,String>|</p><p>Object.<String,Function>|</p><p>Object.<String,Types/_entity/format/fieldsFactory/FieldDeclaration.typedef>|</p><p>Object.<String,Types/_entity/format/Field></p><p>} Формат полей. Это может быть либо полный формат (в этом случае он должен быть определен как массив или экземпляр класса <a class="link-tag" data-className="Types/entity/FormattableMixin">Format</a>), либо как частичный формат (в этом случае он должен быть определен как простой объект).</p>
keyProperty
<p>Название свойства, содержащего первичный ключ</p>
owner
<p>Рекордсет, которому принадлежит запись</p>
properties
<p>Описание собственных свойств модели. Дополняет/уточняет свойства, уже существующие в сырых данных.</p>
rawData
<p>Данные в необработанном формате, которые могут быть распознаны через определенный адаптер.</p>
state
<p>Текущее состояние записи по отношению к рекордсету: отражает факт принадлежности записи к рекордсету и сценарий, в результате которого эта принадлежность была сформирована.</p>
versionCallback
<p>Обработчик изменения версии</p>

Поля

deepChangedPropertiesprotected
<p>Имена свойств и значения, которые были затронуты во время вызовов рекурсивного метода set().</p>
defaultPropertiesValuesprotected
<p>Значения по умолчанию для вычисляемых свойств.</p>
isChangedprotected
<p>Модель изменена.</p>
isDeletedprotected
<p>Модель удалена в источнике данных, из которого она взята.</p>
propertiesDependencyprotected
<p>Карта зависимостей свойств, такая как 'имя свойства' -> ['имена свойств, которые зависят от этого']</p>
propertiesDependencyGatheringprotected
<p>Имя свойства, для которого сейчас собираются зависимости.</p>
propertiesInjectedprotected
<p>Свойства задаются через параметры конструктора.</p>
instanceIdprotected
<p>Уникальный идентификатор</p>
instancePrefixprotected
<p>Префикс значений идентификатора</p>
acceptedStateprotected
<p>Состояние записи после последнего вызова <a class="link-tag" data-className="Types/entity/Record" data-category="method" data-member="acceptChanges">acceptChanges</a></p>
changedFieldsprotected
<p>Данные об измененных полях</p>
fieldsCacheprotected
<p>Объект содержащий закэшированные значения полей</p>
fieldsCloneprotected
<p>Объект содержащий клонированные значения полей</p>
destroyed
<p>Экземпляр был разрушен</p>
eventRaisingprotected
<p>Генерация событий включена</p>
eventRaisingTriggerprotected
<p>Hooks to implement additional behaviour when event rasing occuires</p>
eventBusChannelprotected
<p>Канал событий</p>
eventsQueueprotected
<p>Очередь событий</p>
publishedEventsprotected
<p>Декларированные события</p>
cowprotected
<p>Работа с необработанными данными в режиме Copy-On-Write.</p>
formatCloneprotected
<p>Копия _format, которая используется для кэширования в getFormat()</p>
formatUnlinkedprotected
<p>Значение _$format не связано с исходным значением.</p>
rawDataAdapterprotected
<p>Экземпляр адаптера для работы с необработанными данными.</p>
rawDataFieldsprotected
<p>Список имен полей, взятых из адаптера необработанных данных.</p>
_mediator
<p>Медиатор, отвечающий за связи между сущностями</p>
optionsdeprecatedprotected
getOptionsprotected
<p>Метод реализован в OptionsToPropertyMixin.</p>
instanceNumberprotected
<p>Уникальный номер инстанса</p>
moduleNameprotected
<p>Название класса-конструктора.</p>

Методы

_addChildprotected
<p>Добавляет отношение с другой сущностью</p>
_addRawDataFieldprotected
<p>Добавляет поле в _rawDataFields.</p>
_buildFieldprotected
<p>Создает формат поля по его описанию.</p>
_buildFormatprotected
<p>Строит формат по описанию.</p>
_checkAdapterCompatibilityprotected
<p>Проверяет совместимость адаптеров.</p>
_checkErrorsprotected
<p>Проверяет наличие ошибок</p>
_checkFormatIsWritableprotected
<p>Проверяет, что формат записи доступен для записи</p>
_checkModuleNameprotected
<p>Проверяет, что в прототипе указано имя модуля для RequireJS, иначе не будет работать десериализация</p>
_childChangedprotected
<p>Рекурсивно уведомляет родительские сущности об изменении дочерней</p>
_clearChangedFieldsprotected
<p>Очищает информацию об измененных полях</p>
_clearFieldsCacheprotected
<p>Обнуляет кэш значений полей</p>
_clearFormatprotected
<p>Очищает формат полей. Это работает, только если формат не был объявлен.</p>
_clearFormatCloneprotected
<p>Очизает _formatClone.</p>
_createMediatorprotected
<p>Создает посредника для установления отношений с детьми</p>
_createRawDataAdapterprotected
<p>Создает адаптер для сырых данных</p>
_deleteDependencyCacheprotected
<p>Удаляет закешированное значение для свойства и всех от него зависимых свойств</p>
_getAdapterprotected
<p>Возвращает общий экземпляр адаптера.</p>
_getAllPropertiesprotected
<p>Возвращает массив названий всех свойств (включая свойства в "сырых" данных)</p>
_getChangedFieldValueprotected
<p>Возвращает оригинальное значение измененного поля</p>
_getDefaultAdapterdeprecatedprotected
<p>Возвращает адаптер по умолчанию, как это и должно быть.</p>
_getFieldFormatprotected
<p>Возвращает формат поля с указанным именем.</p>
_getFieldTypeprotected
<p>Возвращает тип поля по его формату.</p>
_getFormatprotected
<p>Возвращает формат поля.</p>
_getHashMapprotected
<p>Возвращает hash map</p>
_getMediatorprotected
<p>Возвращает посредника для установления отношений с детьми</p>
_getOptionsprotected
<p>Возвращает опции объекта</p>
_getRawDataprotected
<p>Возвращает необработанные данные из адаптера.</p>
_getRawDataAdapterprotected
<p>Возвращает экземпляр адаптера для определенного типа данных.</p>
_getRawDataFieldsprotected
<p>Возвращает список имен полей, взятых из адаптера необработанных данных.</p>
_getRawDataFromOptionprotected
<p>Возвращает исходные данные, введенные через параметр.</p>
_getRawDataValueprotected
<p>Возвращает значение поля из "сырых" данных, прогнанное через фабрику</p>
_getSerializableStateprotected
<p>Возвращает всё, что нужно сложить в состояние объекта при сериализации, чтобы при десериализации вернуть его в это же состояние</p>
_hasChangedFieldprotected
<p>Возвращает признак наличия изменений в поле</p>
_hasFormatprotected
<p>Псевдоним для hasDeclaredFormat().</p>
_hasMediatorprotected
<p>Возвращает признак наличия посредника</p>
_hasSameMediatorprotected
<p>Возвращает признак наличия одинакового посредника</p>
_haveToCloneprotected
<p>Возвращает режим работы с клонами значений, поддреживающих клонирование</p>
_initRawDataAdapterprotected
<p>Инициализирует экземпляр адаптера.</p>
_isFieldValueCacheableprotected
<p>Возвращает признак, что значение поля кэшируемое</p>
_isNeedNotifyPropertyChangeprotected
<p>Возвращает признак, что нужно генерировать события об изменении записи</p>
_isUnserializedprotected
<p>Check if the instance was unserialized.</p>
_notifyprotected
<p>Извещает о наступлении события. Если в процессе извещения приходит очередное событие, то извещение о нем будет отправлено после выполнения обработчиков предыдущего.</p>
_notifyChangeprotected
<p>Уведомляет об изменении полей записи</p>
_notifyLaterprotected
<p>Ставит в очередь извещение о наступлении события.</p>
_notifyPushQueueprotected
<p>Добавляет извещение о событии в очередь.</p>
_notifyQueueprotected
<p>Инициирует выполнение обработчиков из очереди событий</p>
_parentChangedprotected
<p>Уведомляет дочерние сущности об изменении родительской</p>
_processCalculatedValueprotected
<p>Вычисляет/записывает значение свойства</p>
_publishprotected
<p>Деклариует наличие событий</p>
_pushDependencyprotected
<p>Добавляет зависимое свойство для текущего рассчитываемого</p>
_pushDependencyForprotected
<p>Добавляет зависимое свойство</p>
_removeChildprotected
<p>Удаляет отношение с другой сущностью</p>
_removeFromQueueprotected
<p>Удаляет из очереди все обработчики указанного события</p>
_resetRawDataAdapterprotected
<p>Сбрасывает экземпляр адаптера для определенного типа данных.</p>
_resetRawDataFieldsprotected
<p>Сбрасывает _rawDataFields.</p>
_setChangedFieldprotected
<p>Устанавливает признак изменения поля</p>
_setMediatorprotected
<p>Устанавливает посредника для установления отношений с детьми</p>
_setPairsprotected
<p>Устанавливает значения полей из пар "новое значение => старое значение"</p>
_setRawDataValueprotected
<p>Конвертирует значение поля через фабрику и сохраняет его в "сырых" данных</p>
_setSerializableStateprotected
<p>Проверяет сериализованное состояние перед созданием инстанса. Возвращает метод, востанавливающий состояние объекта после создания инстанса.</p>
_unlinkFormatOptionprotected
<p>Разрыв связи _$format с исходным значением.</p>
_unsetChangedFieldprotected
<p>Снимает признак изменения поля</p>
acceptChanges
<p>Подтверждает изменения состояния записи с момента предыдущего вызова acceptChanges():</p><p><ul></p><p> <li>Сбрасывает признак изменения для всех измененных полей;</p><p> <li>Меняет <a class="link-tag" data-className="Types/entity/Record" data-category="option" data-member="state">state</a> следующим образом:</p><p> <ul></p><p> <li>Added или Changed становится Unchanged;</li></p><p> <li>Deleted становится Detached;</li></p><p> <li>остальные не меняются.</li></p><p> </ul></p><p> </li></p><p></ul></p><p>Если передан аргумент fields, то подтверждаются изменения только указанного набора полей. <a class="link-tag" data-className="Types/entity/Record" data-category="option" data-member="state">State</a> в этом случае меняется только если fields включает в себя весь набор измененных полей.</p>
addField
<p>Добавляет поле в формат.</p>
addFieldToprotected
<p>Добавляет поле в запись. Если формат не указан, то он строится по типу значения поля.</p>
clone
<p>Создает новый объект, который являтся копией текущего экземпляра.</p>
constructor
<p>Конструктор объекта, принимающий набор опций в качестве первого аргумента</p>
destroy
<p>Разрушает экземпляр</p>
detach
<p>Отвязывает запись от рекордсета: сбрасывает ссылку на владельца и устанавливает состояние detached.</p>
each
<p>Перебирает все свойства модели (включая имеющиеся в "сырых" данных)</p>
extend
filter
<p>Создает запись c набором полей, ограниченным фильтром.</p>
filterFieldsprotected
<p>Создает запись c указанным набором полей</p>
fromJSON
<p>Конструирует экземпляр класса из сериализованного состояния</p>
fromObject
<p>Создает запись по объекту c учетом типов значений полей. Поля добавляются в запись в алфавитном порядке.</p>
get
<p>Возвращает значение свойства.</p><p>Если свойство не существует, возвращает undefined.</p><p>Если свойство является объектом, то всегда возвращается один и тот же объект (если он не был заменен через вызов метода set).</p>
getAdapter
<p>Возвращает адаптер для обработки необработанных данных.</p>
getChanged
<p>Возвращает массив названий измененных полей.</p>
getDefault
<p>Возвращает значение свойства по умолчанию</p>
getEnumerator
<p>Возвращает энумератор для перебора названий свойств модели</p>
getEventHandlers
<p>Возвращет массив подписчиков на событие</p>
getFormat
<p>Возвращает формат поля в режиме "только для чтения".</p>
getInstanceId
<p>Возвращает уникальный идентификатор экземпляра класса.</p>
getKey
<p>Возвращает значение первичного ключа модели</p>
getKeyProperty
<p>Возвращает название свойства, в котором хранится первичный ключ модели</p>
getOwner
<p>Возвращает рекордсет, которому принадлежит запись. Может не принадлежать рекордсету.</p>
getProperties
<p>Возвращает описание свойств модели.</p>
getRawData
<p>Возвращает необработанные данные (клонирует, если есть объект).</p>
getState
<p>Возвращает текущее состояние записи.</p>
getVersion
<p>Возвращает версию объекта.</p><p>Версия соответсвует некому состоянию объекта и меняется при измении как то значимых свойств объекта, например для рекорда это будет изменение значений полей.</p>
has
<p>Проверяет наличие свойства у объекта.</p>
hasDeclaredFormat
<p>Возвращает признак того, что формат был задан явно.</p>
hasEventHandlers
<p>Проверяет наличие подписки на событие</p>
isChanged
<p>Возвращает признак, что поле с указанным именем было изменено.</p><p>Если name не передано, то проверяет, что изменено хотя бы одно поле.</p>
isDestroyedprotected
isEqual
<p>Проверяет эквивалентность текущего объекта другому объекту.</p>
isEventRaising
<p>Возвращает признак, включена ли генерация событий об изменении проекции</p>
merge
<p>Объединяет модель с данными другой модели</p>
rejectChanges
<p>Возвращает запись к состоянию, в котором она была с момента последнего вызова acceptChanges:</p><p><ul></p><p> <li>Отменяются изменения всех полей;</p><p> <li><a class="link-tag" data-className="Types/entity/Record" data-category="option" data-member="state">State</a> возвращается к состоянию, в котором он был сразу после вызова acceptChanges.</li></p><p></ul></p><p>Если передан аргумент fields, то откатываются изменения только указанного набора полей. <a class="link-tag" data-className="Types/entity/Record" data-category="option" data-member="state">State</a> в этом случае меняется только если fields включает в себя весь набор измененных полей.</p>
removeField
<p>Удаляет поле из формата по его имени.</p>
removeFieldAt
<p>Удаляет поле из формата по его позиции.</p>
resetDeclaredFormat
<p>Обнуляет явно заданный формат.</p>
set
<p>Устанавливает значение свойства.</p><p>Если свойство только для чтения, генерирует исключение.</p>
setEventRaising
<p>Включает/выключает генерацию событий об изменении коллекции</p>
setKeyProperty
<p>Устанавливает название свойства, в котором хранится первичный ключ модели</p>
setRawData
<p>Устанавливает необработанные данные.</p>
setState
<p>Устанавливает текущее состояние записи.</p>
subscribe
<p>Добавляет подписку на событие</p>
toJSON
<p>Возвращает сериализованный экземпляр класса</p>
toString
<p>Возвращает значения всех свойств в виде строки формата json</p>
unsubscribe
<p>Отменяет подписку на событие</p>

События

onEventRaisingChange
<p>После изменения режима генерации событий</p>
onPropertyChange
<p>После изменения набора свойств объекта.</p>

Тайпдефы

Property
11/27/2020Мальцев А.А.