Accessor
Get, set, and observe changes to a path on an object.
The goal of this component is to make any property of an object observable at minimal cost. This means if we've added a bunch of event listeners to our accessor, we should be able to swap the data out from underneath, without having to remove and then re-attach all the event listeners. Essentially, the accessor is like a shell for getting and setting properties on arbitrary objects.
Install
node.js:
$ npm install expressionjs-accessor
browser:
$ component install expressionjs/accessor
Example
var accessor = require('expressionjs-accessor');
var data = {
title: 'hello world'
};
var title = accessor('title', data);
title.on('change', function(val){
assert('foo' === val);
done();
});
title.set('foo');
You can also chain together paths:
var data = {
color: {
r: '255',
g: '0',
b: '0',
a: 1
}
};
var red = accessor('color.red', data);
// or one-by-one
var color = accessor('color', data);
var red = accessor('r', color);
If you want to store all accessors relative to some main object, then you can create one without a path. Need to come up with a better API for this, but here's how to do it atm:
var data = {
title: 'hello world',
color: {
r: '255',
g: '0',
b: '0',
a: 1
}
};
var root = new accessor;
root.bind(data);
var color = accessor('color', root);
var red = accessor('color.red', root);
red.on('change', function(){
});
red.set('200');
You can also swap out data too, so once you have your shell, you can reuse it.
var newData = {
title: 'foo',
color: {
r: '0',
g: '0',
b: '255',
a: 0.5
}
};
root.bind(newData);
It should execute all the event listeners for anything that changed from the previous values through the data tree.
Licence
MIT