Package Exports
- emmy
- 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(target, event, handler) | Register handler(s) for event(s) on target(s).
once(target, event, handler) | Register single-shot event(s) handler(s) on target(s).
off(target, event?, handler?) | Remove an event(s) handler(s) for target(s). If no handler(s) passed - remove all registered handlers. In no event passed - remove all registered listeners for all events on target(s).
emit(target, event, data?, bubbles?) | Emit an event(s) with params passed on target(s). data will be available in event.details, if fired on DOM element, else each argument after event will be passed as data, just like usual emitter does.
listeners(event)| Get list of listeners for an event
hasListeners(event)| Check if emitter has event handlers
If a param has (s) sufix - that means a list can be passed.
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.
