BaseDataSource¶
Функция-конструктор, определяющий базовый тип источников данных.
Description¶
Источники данных, представленные в InfinniUI, являются потомками BaseDataSource. В BaseDataSource реализованы базовые API, которые предоставлят все источники данных InfinniUI.
Syntax¶
new BaseDataSource(parameters)
Parameters¶
| Name | Type | Description |
|---|---|---|
| parameters | Object |
Объект с параметрами представления. Один из параметров обязательный: parameters.view - родительское представление источника данных |
Properties¶
| Name | Type | Description |
|---|---|---|
| name | String |
Содержит наименование источника данных |
| onProviderErrorHandler | Script | Содержит обработчик события о том, что поставщик данных вернул ошибку |
Specific Properties¶
Для работы с данными свойствами используйте методы getProperty и setProperty. Обратите внимание, что для работы с данными свойствами необходимо указывать точку в названии.
| Name | Description |
|---|---|
| items | Список элементов источника данных |
| selectedItem | Выделенный элемент |
| filter | Правило фильтрации документов |
| filterParams | Параметры фильтра |
| search | Строка полнотекстового поиска |
Methods¶
| Name | Description |
|---|---|
| getView | Возвращает родительское представление |
| getContext | Возвращает контекст родительского представления |
| getName | Возвращает наименование источника данных |
| setName | Устанавливает наименование источника данных |
| suspendUpdate | Запрещает обновление списка элементов |
| resumeUpdate | Разрешает обновление списка элементов |
| isUpdateSuspended | Возвращает значение, указывающее, запрещено ли обновление списка элементов |
| updateItems | Обновляет список элементов источника данных |
| tryInitData | Пытается обновить список элементов источника. Делает это только в случае, если до этого источник не был прогружен данными |
| isDataReady | Возвращает значение, указывающее, загрузились ли данные в источник или нет |
| getItems | Возвращает список элементов источника данных |
| createItem | Создает новый элемент в источнике данных |
| saveItem | Сохраняет элемент в источнике данных |
| deleteItem | Удаляет элемент из источника данных |
| getSelectedItem | Возвращает выделенный элемент |
| setSelectedItem | Устанавливает выделенный элемент |
| getProperty | Возвращает значение указанного свойства источника |
| setProperty | Устанавливает значение указанного свойства источника |
| isLazy | Возвращает значение, является ли прогрузка данных в источнике “ленивой” или нет |
| setIsLazy | Устанавливает значение, является ли прогрузка данных в источнике “ленивой” или нет |
| isModified | Проверяет, является ли элемент несохраненным |
| isModifiedItems | Проверяет, есть ли несохраненные элементы |
| getFilter | Возвращает правило фильтрации документов |
| setFilter | Устанавливает правило фильтрации документов |
| getFilterParams | Возвращает параметры фильтра |
| setFilterParams | Устанавливает параметры фильтра |
| getSearch | Возвращает строку полнотекстового поиска |
| setSearch | Устанавливает строку полнотекстового поиска |
| getIdProperty | Возвращает наименование свойства с идентификатором элемента (по умолчанию Id) |
| setIdProperty | Устанавливает наименование свойства с идентификатором элемента |
| idOfItem | Возвращает значение идентификатора по переданному элементу item |
| getFillCreatedItem | Возвращает, нужно ли предзаполнение новых элементов на сервере |
| setFillCreatedItem | Устанавливает, нужно ли предзаполнение новых элементов на сервере |
| getErrorValidator | Возвращает функцию проверки элемента на ошибки |
| setErrorValidator | Устанавливает функцию проверки элемента на ошибки |
| getValidationResult | Возвращает результат проверки на ошибки |
| initDataProvider | Определяет обязательное свойство dataProvider. Наследники BaseDataSource должны переопределять этот метод! |
| beforeDeleteItem | Вы можете переопределить этот метод в наследнике BaseDataSource, если есть необходимость выполнять некие действия перед удалением элемента |
Events¶
| Name | Description |
|---|---|
| onSelectedItemChanged | станавливает обработчик события о том, что выделенный элемент изменился |
| onPropertyChanged | Устанавливает обработчик события о том, что одно из свойств источника изменилось |
| onItemCreated | Устанавливает обработчик события о том, что элемент создан |
| onItemSaved | Устанавливает обработчик события о том, что элемент сохранен |
| onItemDeleted | Устанавливает обработчик события о том, что элемент удален |
| onItemsUpdated | Устанавливает обработчик события о том, что список элементов обновлен |
| onErrorValidator | Устанавливает обработчик события о том, что произошла ошибка валидации |
| onProviderError | Устанавливает обработчик события о том, что поставщик данных вернул ошибку |
BaseDataSource.metadata¶
Метаданные базового типа источников данных представления.
Properties¶
| Name | Type | Default | Description |
|---|---|---|---|
| Name | String |
– | Наименование источника данных |
| SuspendUpdate | String |
– | Причина запрета на обновление списка элементов. Для снятия запрета необходимо воспользоваться методом resumeUpdate(). |
| Filter | String1 |
– | Правило фильтрации документов |
| FilterParams | Object |
– | Объект со значениями параметров. Параметр может быть задан как DataBinding. |
| Search | String |
– | Строка полнотекстового поиска |
| IdProperty | String |
‘_id’ | Свойство с идентификатором элемента |
| FillCreatedItem | Boolean |
true | Логическое значение, указывающее, нужно ли предзаполнение новых элементов на сервере |
| IsLazy | Boolean |
true | Логическое значение, определяющее, будет ли прогрузка данных в источнике “ленивой” или нет |
| ResolvePriority | Integer |
0 | Приоритет прогрузки источника данных. Чем выше приоритет, тем раньше источник будет прогружен |
| ValidationErrors | Script | – | Функция проверки элемента на ошибки |
| CustomProperties | Object |
– | Вспомогательные параметры. Могут пригодиться, например, для настройки взаимодействия DataNavigation и RestDataSource. Объект является ассоциативным массивом, в котором key - это название свойства, а value - значение. |
| OnErrorValidator | Script | – | Обработчик события о том, что проверка на ошибки завершена |
| OnSelectedItemChanged | Script | – | Обработчик события о том, что выделенный элемент изменился |
| OnPropertyChanged | Script | – | Обработчик события о том, что одно из свойств источника изменилось |
| OnItemDeleted | Script | – | Обработчик события о том, что элемент удален |
| OnItemsUpdated | Script | – | Обработчик события о том, что список элементов обновлен |
| OnProviderError | Script | – | Обработчик события о том, что поставщик данных вернул ошибку |
1 Шаблонизируемая величина. Заполняется значениями из FilterParams.
Exampes¶
Создать экземпляр BaseDataSource нельзя (это абстрактный класс), однако можно создать ObjectDataSource, который наследуется от BaseDataSource.
{
"ObjectDataSource": {
"Name": "DocumentTypes",
"IdProperty": "guid",
"IsLazy": false,
"ValidationErrors": "{ return { IsValid: (args.Name != null), Items: [{Message: 'Name is required'}] }; }",
"OnPropertyChanged": "{ alert('Property ' + args.property + ' is changed!'); }"
}
}
Допустим возникла зависимость между источниками данных, и для корректной работы MainDataSource необходим загруженный TerminologyDataSource. Для решения этой проблемы достаточно указать ResolvePriority для TerminologyDataSource выше, чем для MainDataSource.
{
"DataSources": [
{
"DocumentDataSource": {
"Name": "MainDataSource",
"ConfigId": "configuration",
"DocumentId": "patients",
"SuspendUpdate": "SomeReason",
"Filter": "gt(Birthday,<%startDate%>)",
"FilterParams": {
"startDate": "date('1985-01-01')"
}
}
},
{
"DocumentDataSource": {
"Name": "TerminologyDataSource",
"ConfigId": "configuration",
"DocumentId": "diseases",
"Search": "Иванов Иван Иванович",
"ResolvePriority": 1
}
}
]
}
Реализация фильтра.
{
"DataSources": [
{
"ObjectDataSource": {
"Name": "ObjectDataSource",
"Items": [
{"_id": 1, "Name": "Mobile small", "currency": 1100, "Display": "480x320"},
{"_id": 2, "Name": "Mobile middle", "currency": 1200, "Display": "640x320"},
{"_id": 3, "Name": "Mobile large", "currency": 1300, "Display": "771x375"},
{"_id": 4, "Name": "Tablet", "currency": 1400, "Display": "960x480"},
{"_id": 5, "Name": "Desktop small", "currency": 1500, "Display": "1024x768"},
{"_id": 6, "Name": "Desktop middle", "currency": 1600, "Display": "1600x900"},
{"_id": 7, "Name": "Desktop", "currency": 2000, "Display": "1920x1080"}
],
"Filter": "and(contains(Name, <%filterName%>),contains(currency, <%filterPrice%>),contains(Display, <%filterDisplay%>))",
"FilterParams": {
"filterName": {
"Source": "ObjectDataSource2",
"Property": "$.FilterName"
},
"filterPrice": {
"Source": "ObjectDataSource2",
"Property": "$.FilterPrice"
},
"filterDisplay": {
"Source": "ObjectDataSource2",
"Property": "$.FilterDisplay"
}
}
}
},
{
"ObjectDataSource": {
"Name": "ObjectDataSource2",
"Items": [
{"_id": 1, "FilterName": "", "FilterPrice": "", "FilterDisplay": ""}
]
}
}
]
}
Пример заморозки DataSource из метаданных
{
"DataSources": [
{
"ObjectDataSource": {
"Name": "ObjectDataSource",
"SuspendUpdate": "SomeReason",
"Items": []
}
}
]
}
Пример настройки RestDataSource для работы с DataNavigation
{
"RestDataSource": {
"Name": "MainDataSource",
"CustomProperties": {
"pageNumber": 0,
"pageSize": 20
},
"GettingParams": {
"Origin": "http://localhost:9900",
"Method": "post",
"Params": {
"skip": {
"Source": "MainDataSource",
"Property": ".pageNumber",
"Converter": {
"ToElement": "{return args.source.getProperty('.pageSize') * args.value;}"
},
"DefaultValue": 0
},
"take": {
"Source": "MainDataSource",
"Property": ".pageSize",
"DefaultValue": 20
}
},
"Path": "/documents/PublicationInfo?skip=<%skip%>&take=<%take%>&count=true",
"Data": {}
},
"UpdatingItemsConverter": "{args.source.setProperty('.totalCount', args.value.Result.Count); return args.value.Result.Items;}"
}
}