Экземпляры данного класса объединяет составы нескольких наборов по определенному правилу.
Набор источников можно задать при создании, с помощью свойства sources
, либо менять в дальнешем методами:
addSource(source)
- добавить источник;
removeSource(source)
- удалить источник;
setSources(sources)
- задать новый нобор источников;
clear()
- удалить все источники (очищает набор);
При изменении состава источников выбрасывается событие sourcesChanged
. Данное событие аналогично itemsChanged
, только в дельте хранятся добавленные и удаленные источники, а не элементы набора. С версии 1.3 для источников применяется resolveDataset, для получения ссылок на набор.
Правило (свойство rule
) определяет, каким образом объединяются наборы. Правило получает два значения: count
- количество вхождений объекта (в скольких источниках он присутствует), и sourceCount
- количество источников. По умолчанию определены следующие правила:
UNION
– объединение, есть хотя бы в одном источнике;
INTERSECTION
– пересечение, есть во всех источниках;
DIFFERENCE
– разность, есть только в одном источнике;
MORE_THAN_ONE_INCLUDE
– не уникальное значение, есть в двух и более источниках;
AT_LEAST_ONE_EXCLUDE
– отсутствует хотя бы в одном источнике;
var DataObject = basis.require('basis.data').Object;
var Dataset = basis.require('basis.data').Dataset;
var Merge = basis.require('basis.data.dataset').Merge;
var foo = new DataObject({ data: { name: 'foo' } });
var bar = new DataObject({ data: { name: 'bar' } });
var baz = new DataObject({ data: { name: 'baz' } });
var source1 = new Dataset({ items: [foo, bar] });
var source2 = new Dataset({ items: [foo, baz] });
var merge = new Merge({
sources: [source1, source2],
rule: Merge.INTERSECTION
});
console.log(merge.getValues('data.name'));
// > ['foo']