class Types/entity:Model
<p>Абстрактная модель.</p><p>Модели обеспечивают доступ к данным и поведению объектов предметной области (сущностям).</p><p>Такими сущностями могут быть, например, товары, пользователи, документы - и другие предметы окружающего мира, которые вы моделируете в своем приложении.</p>
class Types/_entity/Model<T>
Примечание
<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;
</pre>
<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');
}
});
</pre>
<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!');
</pre>
<p></p><p>Модели могут объединяться по принципу "матрёшки" - сырыми данными одной модели является другая модель. Для организации такой структуры следует использовать <a class="link-tag" data-className="Types/entity/adapter/RecordSet">адаптер рекордсета</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'
</pre>
Опции
- adapter
- <p>Адаптер, обеспечивающий доступ к необработанным данным определенного формата. По умолчанию поддерживаются необработанные данные в формате <a class="link-tag" data-className="Types/entity/adapter/Json">Types/entity:adapter.Json</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/collection/format/Format">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>