accessor v3.0.0
accessor
Here's a thing you have to do a lot when using D3 data joins:
// Here, you provide a function to that gets an id from a datum so that D3
// can correctly identify a corresponding element to update.
var thingElements = rootSelectAll('.leaf').data(
things, function getId(thing) { return thing.id; }
);
thingElements.enter().append('option');
// Here, you provide a function get gets a label from a datum so that D3
// can set the text for each element.
thingElements.text(function getLabel(thing) { return thing.label; });
thingElements.exit().remove();While those accessor functions aren't hard to write, it's easier to just use something that makes them for you, like this:
var thingElements = rootSelectAll('.leaf').data(data, accessor());
thingElements.enter().append('option');
thingElements.text(accessor('label'));
thingElements.exit().remove();If you want to write accessors that traverse a path in an object to get properties, do this:
thingElements.text(accessor({ path: 'data/meta/label'));That will make it look for an object named data, then look for an object named meta in that, then look for a property named label within that. If you need to traverse arrays you can use array indexes in the path, e.g. data/list/3/label.
Installation
npm install accessorUsage
var accessor = require('accessor');Accessor takes an argument, property, and returns a function that takes an object and returns that object.property. If you provide no argument property will default to id.
e.g.
var accessor = require('accessor');
rootSelectAll('.leaf').data(things, accessor('foo'));You can specify a second argument, a default value. The accessor will return the default value if the property you're accessing is undefined on the object. (It will never cache accessors that have a default value, BTW.)
If you just want the identity function (x => x), you can use accessor('identity'). An inline x => x definition may actually be fine for your case; accessor('identity') just creates fewer copies of that function than that.
Tests
Run tests with make test.
License
MIT.