JSPM

  • Created
  • Published
  • Downloads 1869
  • Score
    100M100P100Q104927F
  • License unlicensed

Event emitter for lightweight components/jquery-plugins.

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 Build Status Code Climate

Emmy is asbestos-free event emitter for green components and jquery plugins.

  1. It emits events on any target: plain object, html element, jQuery set, Backbone model, color etc.

  2. It is fully compliant with component-emitter, so you can safely replace it with emmy and vice-versa.

  3. It works both in browser and io.

  4. 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.

NPM