Delegation Pattern for JavaScript
This module implements the
delegation pattern
for JavaScript,
in the very popular and usable
Rails style.
Delegating methods
delegate = require('rails-delegate').delegate;
function Car() {
this.engine = new Engine();
delegate('start', 'stop', 'cylinders', { from: this, to: this.engine });
};
myCar = new Car;
Now myCar.start()
calls myCar.engine.start()
and
myCar.stop()
calls myCar.engine.stop()
.
You can also access the property myCar.cylinders
,
which contains the value of myCar.engine.cylinders
.
More information in the spec for delegating methods
and properties.
This library also provides meaningful error messages.
Delegating Events
You can also forward events emitted by wrapped classes.
delegateEvent = require('rails-delegate').delegateEvent;
function Car() {
this.engine = new Engine();
delegateEvent('starting', 'stopping', { from: this.engine, to: this });
};
Now if myCar.engine
emits a starting starting
event,
myCar
also emits that event.
Alternatives
This library aims for maximally readable syntax
that closely matches the
Rails version.
There are other libraries that are different and more versatile,
for example
node-delegates.
Development
See our developer guidelines