DataSet

    常量,譬如 DataSet.HIERARCHY 是树形结构的名称。

    DataSet.connectors

    存储已注册的 Connector(key-value 对)。

    DataSet.transforms

    存储已注册的 Transform(key-value 对)。

    数据集构造函数。

    new DataSet()

    new DataSet(options = {}) 创建并返回 DataSet 实例。具体参数见示例代码。

    ds.isDataSet

    判断是否是 DataSet 时使用,ds.isDataSet === true

    ds.views

    存储所有挂在数据集上的数据视图(key-value对)。

    ds.state

    存储数据集上的状态量(key-value对)。

    ds.createView()

    ds.createView([name, ]options = {}) 创建并返回一个数据视图实例。

    参数 类型 是否可选
    name String
    options Object
    1. const dv1 = ds.createView('foo');
    2. const dv2 = ds.createView('bar', {
    3. watchingStates: [ 'fakeState' ]
    4. });
    options.watchingStates

    创建数据视图实例时,传入的 watchingStates 是用于指定该数据视图监听的 states 状态量的。默认监听所有状态量(也就是任何状态量变更都会导致数据视图重新计算),如果指定为空数组 [],则不监听任何状态量,如果指定为非空数组,则只监听数组元素对应的状态量变更。

    ds.getView()

    ds.getView(name) 返回 name 对应的数据视图实例。

    参数 类型 是否可选
    name String
    1. const dv = ds.getView('foo');

    ds.setView()

    ds.setView(name, dv) 设置 name 对应的数据视图实例为 dv。

    参数 类型 是否可选
    name String
    dv DataSet.View

    ds.setState()

    注意!这个操作会使得关联了状态量 name 的数据视图对象重新执行所有数据处理流程。这个接口为数据集合上挂载的数据视图之间提供了通信通道。
    1. ds.setState('foo', 'bar');

    ds.on()

    ds.on(name, callback) 监听数据集上的 name 事件。

    参数 类型 是否可选
    name String
    callback Function

    目前支持的事件有

    • statechange 状态量变化事件,在调用 setState() 方法后触发。
    注意!这个事件在状态量改变后不是同步触发的,而是在 setState 被调用后异步触发的。
    1. ds.on('statechange', (name, value) => {
    2. console.log(`state ${name}'s value has been changed to ${value}!`)
    3. });

    ds.emit()

    手动触发数据集上的 name 事件。

    参数 类型 是否可选
    name String
    params Arguments

    目前支持的事件有

    • statechange 状态量变化事件,触发后状态量关联的数据视图会重新执行所有数据处理流程。

      DataSet.View

    alias DataSet.DataView

    数据视图构造函数。

    new View()

    const dv = new DataSet.View(ds, options = {}) 创建并返回数据视图实例,具体参数见代码。

    参数 类型 是否可选
    ds DataSet
    options Object

    dv.isView

    dv.loose

    是否关联了数据集。ds.createView()方式创建的数据视图实例为 falsenew DataSet.View(options) 方式创建的则为 true

    dv.dataType

    数据类型,默认为 DataSet.TABLE,可选值有:DataSet.TABLE(普通二维数据),DataSet.GEO(地理数据), DataSet.HIERARCHY(树结构数据),和DataSet.GRAPH(图数据)。

    dv.origin

    存储原始数据。

    dv.rows

    存储处理后的数据。

    dv.transforms

    存储已应用的 transform(数组)。

    dv.source()

    dv.source(data, options) 载入数据。

    详细文档见

    dv.transform()

    dv.transform(options) 执行数据处理数据。执行完这个函数后,transform会被

    参数 类型 是否可选
    options Object

    options 里指定了处理数据使用的 transform 和数据处理的配置项。

    详细文档见 Transform API

    DataSet.registerConnector()

    DataSet.registerConnector(name, callback) 注册一个数据连接函数,注册后所有数据视图都可以使用 name 来引用这个数据连接函数,从而接入某种数据源。

    参数 类型 是否可选
    name String
    callback Function

    callback 接受两个参数:原始数据和配置项。返回值就是 DataView 实例所需要的数据。举个简单例子,如果要注册一个接入 CSV 数据的 Connector,则实现如下:

    1. const _ = require('lodash');
    2. const {
    3. csvParse
    4. } = require('d3-dsv');
    5.  
    6. DataSet.registerConnector('csv', (data, options = {}) => {
    7. const delimiter = options.delimiter || ',';
    8. if (!isString(delimiter)) {
    9. throw new TypeError('Invalid delimiter: must be a string!');
    10. }
    11. return dsvFormat(delimiter).parse(str);
    12. });
    13.  
    14. const testCSV = `Expt,Run,Speed
    15. 1,1,850
    16. 1,2,740
    17. 1,3,900
    18. 1,4,1070`;
    19.  
    20. const dv = new DataSet.View().source(testCSV, {
    21. type: 'csv'
    22.  
    23. console.log(dv.rows);
    24. /*
    25. * dv.rows:
    26. * [
    27. * {Expt: " 1", Run: "1", Speed: "850"}
    28. * {Expt: " 1", Run: "2", Speed: "740"}
    29. * {Expt: " 1", Run: "3", Speed: "900"}
    30. * {Expt: " 1", Run: "4", Speed: "1070"}
    31. * ]
    32. */

    DataSet.getConnector(name) 返回 name 对应的 Connector。

    参数 类型 是否可选
    name String

    DataSet.registerTransform()

    DataSet.registerTransform(name, callback) 注册一个数据处理函数,注册后所有数据视图都可以使用 name 来引用这个数据处理函数,从而进行某种数据处理。

    callback 接受两个参数:数据视图(DataSet.View)实例和配置项。举个简单例子,如果要注册一个过滤数据的 Transform,则实现如下:

    1. // 承接上述 Connector 的代码
    2. DataSet.registerTransform('filter', (dv, options = {}) => {
    3. dv.rows = dv.rows.filter(options.callback || (row => !!row));
    4. });
    5.  
    6. dv.transform({
    7. type: 'filter',
    8. callback(row) {
    9. return row.Run !== "1";
    10. }
    11. })
    12.  
    13. console.log(dv.rows);
    14. /*
    15. * dv.rows:
    16. * [
    17. * {Expt: " 1", Run: "2", Speed: "740"}
    18. * {Expt: " 1", Run: "3", Speed: "900"}
    19. * {Expt: " 1", Run: "4", Speed: "1070"}
    20. * ]
    21. */

    DataSet.getTransform()

    返回 name 对应的 Transform。

    参数 类型 是否可选
    name String

    Connector

    原文: