DataSet documentation

Contents

Overview

Vis.js comes with a flexible DataSet, which can be used to hold and manipulate unstructured data and listen for changes in the data. The DataSet is key/value based. Data items can be added, updated and removed from the DatSet, and one can subscribe to changes in the DataSet. The data in the DataSet can be filtered and ordered, and fields (like dates) can be converted to a specific type. Data can be normalized when appending it to the DataSet as well.

Example

The following example shows how to use a DataSet.

// create a DataSet
var options = {};
var data = new vis.DataSet(options);

// add items
// note that the data items can contain different properties and data formats
data.add([
    {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},
    {id: 2, text: 'item 2', date: '2013-06-23', group: 2},
    {id: 3, text: 'item 3', date: '2013-06-25', group: 2},
    {id: 4, text: 'item 4'}
]);

// subscribe to any change in the DataSet
data.subscribe('*', function (event, params, senderId) {
    console.log('event', event, params);
});

// update an existing item
data.update({id: 2, group: 1});

// remove an item
data.remove(4);

// get all ids
var ids = data.getIds();
console.log('ids', ids);

// get a specific item
var item1 = data.get(1);
console.log('item1', item1);

// retrieve a filtered subset of the data
var items = data.get({
    filter: function (item) {
        return item.group == 1;
    }
});
console.log('filtered items', items);

// retrieve formatted items
var items = data.get({
    fields: ['id', 'date'],
    convert: {
        date: 'ISODate'
    }
});
console.log('formatted items', items);

Construction

A DataSet can be constructed as:

var data = new vis.DataSet(options)

After construction, data can be added to the DataSet using the methods add and update, as described in section Data Manipulation.

The parameter options is optional and is an object which can contain the following properties:

Name Type Default value Description
fieldId String "id" The name of the field containing the id of the items. When data is fetched from a server which uses some specific field to identify items, this field name can be specified in the DataSet using the option fieldId. For example CouchDB uses the field "_id" to identify documents.
convert Object.<String, String> none An object containing field names as key, and data types as value. By default, the type of the properties of items are left unchanged. Item properties can be normalized by specifying a field type. This is useful for example to automatically convert stringified dates coming from a server into JavaScript Date objects. The available data types are listed in section Data Types.

Data Manipulation

The data in a DataSet can be manipulated using the methods add, update, and remove. The DataSet can be emptied using the method clear.

// create a DataSet
var data = new vis.DataSet();

// add items
data.add([
    {id: 1, text: 'item 1'},
    {id: 2, text: 'item 2'},
    {id: 3, text: 'item 3'}
]);

// update an item
data.update({id: 2, text: 'item 2 (updated)'});

// remove an item
data.remove(3);

Add

Add a data item or an array with items.

Syntax:
var addedIds = DataSet.add(data [, senderId])
The argument data can contain:

After the items are added to the DataSet, the DataSet will trigger an event add. When a senderId is provided, this id will be passed with the triggered event to all subscribers.

The method will throw an Error when an item with the same id as any of the added items already exists.

Update

Update a data item or an array with items.

Syntax:
var updatedIds = DataSet.update(data [, senderId])
The argument data can contain:

The provided properties will be merged in the existing item. When an item does not exist, it will be created.

After the items are updated, the DataSet will trigger an event add for the added items, and an event update. When a senderId is provided, this id will be passed with the triggered event to all subscribers.

Remove

Remove a data item or an array with items.

Syntax:
var removedIds = DataSet.remove(id [, senderId])

The argument id can be:

The method ignores removal of non-existing items, and returns an array containing the ids of the items which are actually removed from the DataSet.

After the items are removed, the DataSet will trigger an event remove for the removed items. When a senderId is provided, this id will be passed with the triggered event to all subscribers.

Clear

Clear the complete DataSet.

Syntax:
var removedIds = DataSet.clear([senderId])

After the items are removed, the DataSet will trigger an event remove for all removed items. When a senderId is provided, this id will be passed with the triggered event to all subscribers.

Data Filtering

Data can be retrieved from the DataSet using the method get. This method can return a single item or a list with items.

A single item can be retrieved by its id:

var item1 = dataset.get(1);

A selection of items can be retrieved by providing an array with ids:

var items = dataset.get([1, 3, 4]); // retrieve items 1, 3, and 4

All items can be retrieved by simply calling get without specifying an id:

var items = dataset.get();          // retrieve all items

Items can be filtered on specific properties by providing a filter function. A filter function is executed for each of the items in the DataSet, and is called with the item as parameter. The function must return a boolean. All items for which the filter function returns true will be emitted.

// retrieve all items having a property group with value 2
var group2 = dataset.get({
    filter: function (item) {
        return (item.group == 2);
    }
});

// retrieve all items having a property balance with a value above zero
var positiveBalance = dataset.get({
    filter: function (item) {
        return (item.balance > 0);
    }
});

Data Formatting

The DataSet contains functionality to format data retrieved via the method get. The method get has the following syntax:

var item  = DataSet.get(id, options);   // retrieve a single item
var items = DataSet.get(ids, options);  // retrieve a selection of items
var items = DataSet.get(options);       // retrieve all items or a filtered set

Where options is an Object which can have the following properties:

Name Type Description
fields String[ ] An array with field names. By default, all properties of the items are emitted. When fields is defined, only the properties whose name is specified in fields will be included in the returned items.
convert Object.<String, String> An object containing field names as key, and data types as value. By default, the type of the properties of an item are left unchanged. When a field type is specified, this field in the items will be converted to the specified type. This can be used for example to convert ISO strings containing a date to a JavaScript Date object, or convert strings to numbers or vice versa. The available data types are listed in section Data Types.
filter Function Items can be filtered on specific properties by providing a filter function. A filter function is executed for each of the items in the DataSet, and is called with the item as parameter. The function must return a boolean. All items for which the filter function returns true will be emitted. See section Data Filtering.
order String | Function Order the items by a field name or custom sort function.

The following example demonstrates formatting properties and filtering properties from items.

// create a DataSet
var data = new vis.DataSet();
data.add([
    {id: 1, text: 'item 1', date: '2013-06-20', group: 1, first: true},
    {id: 2, text: 'item 2', date: '2013-06-23', group: 2},
    {id: 3, text: 'item 3', date: '2013-06-25', group: 2},
    {id: 4, text: 'item 4'}
]);

// retrieve formatted items
var items = data.get({
    fields: ['id', 'date', 'group'],    // output the specified fields only
    convert: {
        date: 'Date',                   // convert the date fields to Date objects
        group: 'String'                 // convert the group fields to Strings
    }
});

Data Types

DataSet supports the following data types:

Name Description Examples
Boolean A JavaScript Boolean true
false
Number A JavaScript Number 32
2.4
String A JavaScript String "hello world"
"2013-06-28"
Date A JavaScript Date object new Date()
new Date(2013, 5, 28)
new Date(1372370400000)
Moment A Moment object, created with moment.js moment()
moment('2013-06-28')
ISODate A string containing an ISO Date new Date().toISOString()
"2013-06-27T22:00:00.000Z"
ASPDate A string containing an ASP Date "/Date(1372370400000)/"
"/Date(1198908717056-0700)/"

Subscriptions

One can subscribe on changes in a DataSet. A subscription can be created using the method subscribe, and removed with unsubscribe.

// create a DataSet
var data = new vis.DataSet();

// subscribe to any change in the DataSet
data.subscribe('*', function (event, params, senderId) {
    console.log('event:', event, 'params:', params, 'senderId:', senderId);
});

// add an item
data.add({id: 1, text: 'item 1'});              // triggers an 'add' event
data.update({id: 1, text: 'item 1 (updated)'}); // triggers an 'update' event
data.remove(1);                                 // triggers an 'remove' event

Subscribe

Subscribe to an event.

Syntax:
DataSet.subscribe(event, callback)
Where:

Unsubscribe

Unsubscribe from an event.

Syntax:
DataSet.unsubscribe(event, callback)
Where event and callback correspond with the parameters used to subscribe to the event.

Events

The following events are available for subscription:

Event Description
add The add event is triggered when an item or a set of items is added, or when an item is updated while not yet existing.
update The update event is triggered when an existing item or a set of existing items is updated.
remove The remove event is triggered when an item or a set of items is removed.
* The * event is triggered when any of the events add, update, and remove occurs.

Callback

The callback functions of subscribers are called with the following parameters:

function (event, params, senderId) {
    // handle the event
});

where the parameters are defined as

Parameter Type Description
event String Any of the available events: add, update, or remove.
params Object | null Optional parameters providing more information on the event. In case of the events add, update, and remove, params is always an object containing a property items, which contains an array with the ids of the affected items.
senderId String | Number An senderId, optionally provided by the application code which triggered the event. If senderId is not provided, the argument will be null.

Data Policy

All code and data is processed and rendered in the browser. No data is sent to any server.