JSPM

  • Created
  • Published
  • Downloads 1829
  • Score
    100M100P100Q104764F
  • License unlicensed

Event emitter for lightweight components/jquery-plugins.

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

NPM