event-actions
Advanced tools
Comparing version 0.2.0 to 0.2.1
@@ -59,2 +59,6 @@ "use strict"; | ||
}.bind(this); | ||
} else { | ||
// bind parents 'action' and 'event' events to this instance | ||
this._parent.on('action', this.emit.bind(this, 'action')); | ||
this._parent.on('event', this.emit.bind(this, 'event')); | ||
} | ||
@@ -61,0 +65,0 @@ } |
{ | ||
"name": "event-actions", | ||
"description": "Application level event and action emitter", | ||
"version": "0.2.0", | ||
"version": "0.2.1", | ||
"main": "index.js", | ||
@@ -6,0 +6,0 @@ "author": { |
152
README.md
@@ -5,2 +5,4 @@ # EventActions | ||
components to each other by using common emitter for events and actions. | ||
EventActions support namespacing which makes it easy to separate components, | ||
and use same listeners and emitter in different namespaces. | ||
@@ -17,33 +19,149 @@ Events are used for notify listeners when something happens. | ||
## Usage | ||
## Example usage | ||
```javascript | ||
// get default EventHub instance | ||
var actions = require('event-actions')(); | ||
var EventActions = require('event-actions'); | ||
// listen 'click' event from component A | ||
actions.onEvent('A:click', function(button) { | ||
console.log('Component A was clicked with button ' + button); | ||
// create EventActions instance | ||
var root = new EventActions(); | ||
// create namespaced instance from 'root' | ||
var child = root.createNamespace('child'); | ||
// add action listener for root namespaces 'action' | ||
root.onAction(':action', function() { | ||
console.log('Root action'); | ||
}); | ||
// add action listener for 'child:action' | ||
child.onAction(':action', function() { | ||
console.log('Child action'); | ||
}); | ||
// same as: child.onAction('child:action', ... | ||
// emit event | ||
actions.emitEvent('A:click', 'Button 1'); | ||
// namespaced EventEmitters can listen for any other namespace | ||
// add action listener in child for roots 'action' | ||
child.onAction('action', function() { | ||
console.log('Root action in child'); | ||
}); | ||
// listen 'process' action | ||
actions.onAction('B:process', function(a, b) { | ||
console.log('Processing values', a + b); | ||
// add listener for all actions that are emitted | ||
root.on('action', function(target, action, args) { | ||
// target: namespace action was target to | ||
// action: name of the action | ||
// args: arguments passed to action | ||
}); | ||
// emit action | ||
actions.emitAction('B:process', 3, 5); | ||
// emit 'action' in the root namespace | ||
root.emitAction('action'); | ||
// or | ||
child.emitAction('action'); | ||
// emit 'action' in the child namespace | ||
child.emitAction(':action'); | ||
// or | ||
root.emitAction('child:action'); | ||
// or | ||
child.emitAction('child:action'); | ||
// same rules apply also for events, just replace word 'action' with 'event'.. | ||
``` | ||
See 'example.js' for more complete usage example. | ||
## Namespacing | ||
Namespacing actions and events is crusial, expecially when number of connected | ||
components grows. | ||
Namespacing actions and events is crusial, expecially when number of connected components grows. | ||
In the future namespacing can be used to simplify things, such as removing all | ||
listeners from specific component. | ||
Either absolute or relative namespaces can be used when adding listeners or emitting events. Relative namespace starts with ':' and will be prepend with EventActions instances namespace. | ||
In example if EventActions namespace is 'root:child', then emitting ':action' will actually trigger listeners registered for 'root:child:action'. Same goes for registering listeners. Adding listener for ':action' on EventActions that has namespace 'root:child', it will listen for events 'root:child:action'. | ||
## Events | ||
### `action` | ||
* target Target namespace of the action | ||
* action Name of the action | ||
* args Arguments passed with action | ||
Emitted when action is emitted from any emitter that share same root emitter. | ||
### `event` | ||
* target Target namespace of the event | ||
* event Name of the event | ||
* args Arguments passed with event | ||
## EventEmitters | ||
EventActions instance has two EventEmitter, `actions` and `events`. | ||
They can be used as normal EventEmitter. | ||
## Methods | ||
### `createNamespace` | ||
* ns Namespace | ||
Create namespaced version of EventActions instance. | ||
Namespaced instances use root emitters. | ||
Namespace is appended to relative action/event names. | ||
### `parent` | ||
Returns parent EventActions instance or `null` if root. | ||
### `root` | ||
Returns root EventActions instance. | ||
### `onAction` / `onEvent` | ||
* name Action/event name, absolute or relative | ||
* listener Action/event listener | ||
Add listener for action/event. | ||
### `emitAction` / `emitEvent` | ||
* name Action/event name, absolute or relative | ||
* arguments | ||
Triggers action/event listener with given name. | ||
### `removeAction` / `removeEvent` | ||
* name Action/event name, absolute or relative | ||
* listener Action/event listener to remove (optional) | ||
Remove all or specific listener with given name. | ||
### `onceAction` / `onceEvent` | ||
* name Action/event name, absolute or relative | ||
* listener Action/event listener | ||
Listen for action/event. Listener is removed after triggering. | ||
### `bindAction` / `bindEvent` | ||
* sender Emitter to listen, any EventEmitter | ||
* event Event to listen for | ||
* toName Bind to name | ||
Binds any EventEmitter event to specified action or event. | ||
Enables action/event piping: | ||
``` | ||
var A = new EventActions(); | ||
var B = new EventActions(); | ||
// when 'click' action is emitted from A, it is piped to B action 'child:action' | ||
B.bindAction(A.actions, 'click', 'child:action'); | ||
// when 'player:paused' event is emitted from B, it is piped to A action 'controls:update' | ||
A.bindAction(B.events, 'player:paused', 'controls:update'); | ||
``` |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
14603
166
0
6
255