Экземпляры данного класса объединяет составы нескольких наборов по определенному правилу.
Набор источников можно задать при создании, с помощью свойства 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']