var assert = require('assert'), moment = require('moment'), vis = require('../dist/vis.js'), DataSet = vis.DataSet, DataView = vis.DataView; var groups = new DataSet(); // add items with different groups groups.add([ {id: 1, content: 'Item 1', group: 1}, {id: 2, content: 'Item 2', group: 2}, {id: 3, content: 'Item 3', group: 2}, {id: 4, content: 'Item 4', group: 1}, {id: 5, content: 'Item 5', group: 3} ]); var group2 = new DataView(groups, { filter: function (item) { return item.group == 2; } }); // test getting the filtered data assert.deepEqual(group2.get(), [ {id: 2, content: 'Item 2', group: 2}, {id: 3, content: 'Item 3', group: 2} ]); // test filtering the view contents assert.deepEqual(group2.get({ filter: function (item) { return item.id > 2; } }), [ {id: 3, content: 'Item 3', group: 2} ]); // test event subscription var groupsTriggerCount = 0; groups.subscribe('*', function () { groupsTriggerCount++; }); var group2TriggerCount = 0; group2.subscribe('*', function () { group2TriggerCount++; }); groups.update({id:2, content: 'Item 2 (changed)'}); assert.equal(groupsTriggerCount, 1); assert.equal(group2TriggerCount, 1); groups.update({id:5, content: 'Item 5 (changed)'}); assert.equal(groupsTriggerCount, 2); assert.equal(group2TriggerCount, 1); // detach the view from groups group2.setData(null); assert.equal(groupsTriggerCount, 2); assert.equal(group2TriggerCount, 2); groups.update({id:2, content: 'Item 2 (changed again)'}); assert.equal(groupsTriggerCount, 3); assert.equal(group2TriggerCount, 2);