Package Exports
- emmy
- emmy/delegate
- emmy/emit
- emmy/off
- emmy/on
- emmy/once
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (emmy) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Emmy

Emmy is asbestos-free event emitter for green components and jquery plugins.
It emits events on any target: plain object, html element, jQuery set, Backbone model, color etc.
It is fully compliant with component-emitter, so you can safely replace it with emmy and vice-versa.
It works both in browser and io.
It is only 1.07kb gzipped. Besides, any method can be required selectively as
require('emmy/<method>');, in that build size can be reduced even more.
Test it, feel it.
Use
For browser use browserify or standalone emmy.js.
Install:
$ npm install emmy
Static methods:
var Emitter = require('emmy');
Emitter.on(target, 'evt', function(){});
Emitter.emit(target, 'evt', data1, data2);
Emitter.off(target, 'evt');
//typical use-case
Emitter.once(webWorker, 'message', function(){...});Create Emitter instance:
var Emitter = require('emmy');
var emitter = new Emitter;
emitter.emit('something');Mixin object:
var Emitter = requre('emmy');
user = Emitter({name: 'John'});
user.emit('hello');Mixin prototype:
var Emitter = require('emmy');
Emitter(User.prototype);Inherit Emitter:
var Emitter = require('emmy');
function Actor(){};
//Give out emmy to an actor :)
Actor.prototype = Object.create(Emitter);
var actor = new Actor();
actor
//Bind events
.on('event', handler)
.on('otherEvent', handler)
.on('event2', [handler1, handler2]) //bind list of handlers
//Unbind events
.off('event', handler)
.off('otherEvent') //unbind all 'otherEvent' callbacks
.off('event2', [handler1, handler2]); //unbind list of handlers
.off(target) //unbind all events
//Emit events
.emit('a')
.emit('b', data, bubbles);Selective methods:
var once = require('emmy/once');
once(worker, 'message', function(){});API
Method | Description |
--- | --- | --- |
on(event, handler) | Register a handler or a list of handlers for an event.
one(event, handler) | Register a single-shot event handler or handlers.
off(event?, handler?) | Remove an event handler. If no handler passed - remove all registered handlers. In no event passed - remove all registered listeners for all events.
emit(event, data?, bubbles?) | Emit an event with params passed. data will be available in event.details, if fired on DOM element.
listeners(event)| Get list of listeners for an event
hasListeners(event)| Check if emitter has event handlers
Afterword
A somewhat more comprehensive emitter based on emmy - have a look at ENot — event notation system.
There’s also a similar project - emmitt, but it can’t emit bubbling events nor DOM-events at all. It does not provide an Emitter class, listeners methods, and it has a bit too many letters in title :). No, seriously, emmy is only 4 letters length, in that if you have indentation size == 4, your chain calls will look beautiful.
