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