Коллекции. ICollection
Types/collection:IEnumerable
Интерфейс коллекции элементов c последовательным доступом. Позволяет перебирать элементы один за другим.
Примеры реализации
- Types/entity:Record — перебор полей записи;
- Types/collection:Dictionary — перебор значений справочника;
- Types/collection:List — перебор элементов списка.
Примеры
Переберем поля записи:
// TypeScript
import {Record} from 'Types/entity';
const employee = new Record({
rawData: {
id: 1,
firstName: 'John',
lastName: 'Smith'
}
});
employee.each((name) => {
console.log(name);
});
// output: id, firstName, lastName
Types/collection:IList
Интерфейс списка — коллекции c доступом по индексу.
Возможности
- чтение/запись элемента коллекции по индексу;
- добавление/удаление элементов коллекции по индексу;
- поиск индекса элемента;
- очистка списка, замена содержимого из другой коллекции;
- получение количества элементов.
Примеры реализации
- Types/collection:List — список;
- Types/collection:ObservableList — список с поддержкой шаблона проектирования "Издатель-подписчик";
- Types/entity:format — список полей записи/таблицы;
Примеры
Получим значения элементов коллекции:
// TypeScript
import {List} from 'Types/collection';
const characters = new List({
items: [{
firstName: 'Tom',
lastName: 'Sawyer'
}, {
firstName: 'Huckleberry',
lastName: 'Finn'
}]
});
// 'Tom'
const tomsName = characters.at(0).firstName;
// 'Huckleberry'
const huckleberriesName = characters.at(1).firstName;
Types/collection:RecordSet
Рекордсет — список записей, имеющих общий формат полей.
Возможности
Рекордсет обладает всеми возможностями ObservableList.
Дополнительные возможности:
- использование сырых данных в разных форматах;
- генерация записей по сырым данным;
- внедрение собственных конструкторов записей;
- манипуляции с форматом полей;
- сериализация/десериализация;
Важно
по умолчанию используется адаптер для данных в формате JSON. Если вы используете данные в каком-либо другом формате (СБИС-JSON, XML), то нужно подключить соответствующий адаптер.
Примеры
Создадим рекордсет, в котором в качестве сырых данных используется JSON:
// TypeScript
import {RecordSet} from 'Types/collection';
const characters = new RecordSet({
rawData: [{
firstName: 'Tom',
lastName: 'Sawyer'
}, {
firstName: 'Huckleberry',
lastName: 'Finn'
}]
});
// 'Tom'
const tomsName = characters.at(0).get('firstName');
// 'Huckleberry'
const huckleberriesName = characters.at(1).get('firstName');
Создадим рекордсет, в котором в качестве сырых данных используется ответ БЛ СБИС:
// TypeScript
import {RecordSet} from 'Types/collection';
import {adapter} from 'Types/entity';
const serverResponse = {
_type: 'recordset',
d: [
['Tom', 'Sawyer'],
['Huckleberry', 'Finn']
],
s: [
{n: 'firstName', t: 'Строка'},
{n: 'lastName', t: 'Строка'}
]
};
const characters = new RecordSet({
rawData: serverResponse,
adapter: new adapter.Sbis()
});
// 'Tom'
const tomsName = characters.at(0).get('firstName');
// 'Huckleberry'
const huckleberriesName = characters.at(1).get('firstName');