expressionjs-accessor

0.1.0 • Public • Published

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

Readme

Keywords

none

Package Sidebar

Install

npm i expressionjs-accessor

Weekly Downloads

4

Version

0.1.0

License

none

Last publish

Collaborators

  • viatropos