Contents
- Overview
- Example
- Construction
- Methods
- Properties
- Subscriptions
- Data Manipulation
- Data Selection
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 DataSet, 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 DataSetvar options = {};var data = new vis.DataSet(options);// add items// note that the data items can contain different properties and data formatsdata.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 DataSetdata.on('*', function (event, properties, senderId) { console.log('event', event, properties);});// update an existing itemdata.updateOnly({id: 2, group: 1});// remove an itemdata.remove(4);// get all idsvar ids = data.getIds();console.log('ids', ids);// get a specific itemvar item1 = data.get(1);console.log('item1', item1);// retrieve a filtered subset of the datavar items = data.get({ filter: function (item) { return item.group == 1; }});console.log('filtered items', items);// retrieve formatted itemsvar items = data.get({ fields: ['id', 'date'], type: { date: 'ISODate' }});console.log('formatted items', items);
Construction
A DataSet can be constructed as:
var data = new vis.DataSet([data] [, options])
After construction, data can be added to the DataSet using the methods add
and updateOnly
, as described in section Data Manipulation.
The parameter data
is optional and is an Array with items.
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. |
type | Object.<String,String> | none | Deprecated: will be removed in the future. 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. |
queue | Object | boolean | none | Queue data changes ('add', 'update', 'remove') and flush them at once. The queue can be flushed manually by calling DataSet.flush() , or can be flushed after a configured delay or maximum number of entries. When
|
Methods
DataSet contains the following methods.
Method | Return Type | Description |
---|---|---|
add(data [, senderId]) | Id[] | Add one or multiple items to the DataSet. data can be a single item or an array with items. Adding an item will fail when there already is an item with the same id. The function returns an array with the ids of the added items. See section Data Manipulation. |
clear([senderId]) | Id[] | Clear all data from the DataSet. The function returns an array with the ids of the removed items. |
distinct(field) | Array | Find all distinct values of a specified field. Returns an unordered array containing all distinct values. If data items do not contain the specified field are ignored. |
flush() | none | Flush queued changes. Only available when the DataSet is configured with the option queue , see section Construction. |
forEach(callback[,options]) | none | Execute a callback function for every item in the dataset. The available options are described in section Data Selection. |
get([options] [, data]) get(id [,options] [, data]) get(ids [, options] [, data]) | Object | Array | Get a single item, multiple items, or all items from the DataSet. Usage examples can be found in section Getting Data. The available options are described in section Data Selection. When a single id is requested and not found null is returned. When multiple ids are requested and not found an Array containing null s is returned. |
getDataSet() | DataSet | Get the DataSet itself. In case of a DataView, this function does not return the DataSet to which the DataView is connected. |
getIds([options]) | Id[] | Get ids of all items or of a filtered set of items. Available options are described in section Data Selection, except that options fields and type are not applicable in case of getIds . |
map(callback [, options]) | Array | Map every item in the DataSet. The available options are described in section Data Selection. |
max(field) | Object | null | Find the item with maximum numeric value of specified field. Returns null if no item is found, or if none of the found items has a numeric value. |
min(field) | Object | null | Find the item with minimum numeric value of specified field. Returns null if no item is found, or if none of the found items has a numeric value. |
off(event, callback) | none | Unsubscribe from an event, remove an event listener. See section Subscriptions. |
on(event, callback) | none | Subscribe to an event, add an event listener. See section Subscriptions. |
remove(id [, senderId]) remove(ids [, senderId]) | Id[] | Remove one or multiple items by id or by the items themselves. Returns an array with the ids of the removed items. See section Data Manipulation. |
setOptions(options) | none | Set options for the DataSet. Available options:
|
update(data [, senderId]) | Id[] | Update one or multiple existing items. data can be a single item or an array with items. When an item doesn't exist, it will be created. Returns an array with the ids of the removed items. See section Data Manipulation. |
updateOnly(data [, senderId]) | Id[] | Update one or multiple existing items. data can be a single item or an array of items. When an item doesn't exist, an exception is thrown. Returns an array with the ids of the updated items. See section Data Manipulation. |
Properties
DataSet contains the following properties.
Property | Type | Description |
---|---|---|
length | Number | The number of items in the DataSet. |
Subscriptions
One can subscribe on changes in a DataSet. A subscription can be created using the method on
, and removed with off
.
// create a DataSetvar data = new vis.DataSet();// subscribe to any change in the DataSetdata.on('*', function (event, properties, senderId) { console.log('event:', event, 'properties:', properties, 'senderId:', senderId);});// triggers an 'add' eventdata.add({ id: 1, text: "item 1 (new)" });// triggers an 'update' eventdata.updateOnly({ id: 1, text: "item 1 (updated)" });// triggers an 'update' eventdata.update({ id: 1, text: "item 1 (updated again)" });// triggers an 'add' eventdata.update({ id: 2, text: "item 2 (new)" });// triggers 'add' and 'update' eventsdata.update( { id: 1, text: "item 1 (updated once more)" }, { id: 3, text: "item 3 (new)" });// triggers an 'remove' eventdata.remove(1);
On
Subscribe to an event.
Syntax:
DataSet.on(event, callback)
Where:
-
event
is a String containing any of the events listed in section Events. -
callback
is a callback function which will be called each time the event occurs. The callback function is described in section Callback.
Off
Unsubscribe from an event.
Syntax:
DataSet.off(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, properties, senderId) { // handle the event});
where the parameters are defined as
Parameter | Type | Description |
---|---|---|
event | String | Any of the available events: add , update , or remove . |
properties | Object|null | Optional properties providing more information on the event. In case of the events add , update , and remove , properties is always an object containing a property items , which contains an array with the ids of the affected items. The update and remove events have an extra field oldData containing the original data of the items in the dataset before the items were updated or removed. The update event also contains a field data containing the changes: the properties of the items that are being updated. |
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 Manipulation
The data in a DataSet can be manipulated using the methods add, updateOnly, update, and remove. The DataSet can be emptied using the method clear.
// create a DataSetvar data = new vis.DataSet();// add itemsdata.add([ {id: 1, text: 'item 1'}, {id: 2, text: 'item 2'}, {id: 3, text: 'item 3'}]);// update an itemdata.updateOnly({id: 2, text: 'item 2 (updated)'});// remove an itemdata.remove(3);
Add
Add a data item or an array with items.
Syntax:
var addedIds = DataSet.add(data [, senderId])
The argument data
can contain:
- An
Object
containing a single item to be added. The item must contain an id. - An
Array
containing a list with items to be added. Each item must contain an id.
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.
UpdateOnly
Update a data item or an array with items.
Syntax:
var updatedIds = DataSet.updateOnly(data [, senderId])
The argument data
can contain:
- An
Object
containing a single item to be updated. The item must contain an id. - An
Array
containing a list with items to be updated. Each item must contain an id.
The provided properties will be deeply merged in the existing item. When an item does not exist, an exception will be thrown. It is also possible to delete properties by assigning them the DELETE
symbol.
After the items are updated, the DataSet will trigger update
event. When a senderId
is provided, this id will be passed with the triggered event to all subscribers.
Update (or add)
Update a data item or an array with items, creating items that don't exist yet.
Syntax:
var updatedIds = DataSet.update(data [, senderId])
The argument data
can contain:
- An
Object
containing a single item to be updated. The item must contain an id. - An
Array
containing a list with items to be updated. Each item must contain an id.
The provided properties will be shallowly merged in the existing item. It's not possible to remove properties through this method. 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.
Warning for TypeScript users: This is a hole in type checking as it can add partial items into the DataSet.
Remove
Remove a data item or an array with items.
Syntax:
var removedIds = DataSet.remove(id [, senderId])
The argument id
can be:
- A
Number
orString
containing the id of a single item to be removed. - An
Object
containing the item to be deleted. The item will be deleted by its id. - An Array containing ids or items to be removed.
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 Selection
The DataSet contains functionality to format, filter, and sort data retrieved via the methods get
, getIds
, forEach
, and map
. These methods have the following syntax:
DataSet.get([id] [, options]);DataSet.getIds([options]);DataSet.forEach(callback [, options]);DataSet.map(callback [, options]);
Where options
is an Object which can have the following properties:
Name | Type | Required | Description |
---|---|---|---|
fields | String[] | Object.<String,String> | no | An array with field names, or an object with current field name and new field name that the field is returned as. 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. |
type | Object.<String,String> | no | 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 | no | 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 | no | Order the items by a field name or custom sort function. |
returnType | String | no | Determine the type of output of the get function. Allowed values are 'Array' | 'Object' . The default returnType is an Array. The Object type will return a JSON object with the ID's as keys. |
The following example demonstrates formatting properties and filtering properties from items.
// create a DataSetvar 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 itemsvar items = data.get({ fields: ['id', 'date', 'group'], // output the specified fields only type: { date: 'Date', // convert the date fields to Date objects group: 'String' // convert the group fields to Strings }});
Getting Data
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
Data Filtering
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 2var group2 = dataset.get({ filter: function (item) { return (item.group == 2); }});// retrieve all items having a property balance with a value above zerovar positiveBalance = dataset.get({ filter: function (item) { return (item.balance > 0); }});
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)/" |
Id | Id type of items, JavaScript Number or String | 7 "7" "I'm an id!" |