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 an event emitter for lightweight components and jquery plugins. It emits events on any target: plain object, html element, jQuery set, Backbone model, color etc.
Emmy is fully compliant with component-emitter, so you can safely replace it with emmy and vice-versa.
It works both in browser and io. Browserified emmy is only 1.07kb gzipped. Also any method can be required selectively as require('emmy/<method>');, in that you can reduce build size even more.
Last but not least, it is asbestos-free.
Test it, feel it.
Use
For browser use browserify or 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.
