0.1.2 • Published 9 years ago

yaee v0.1.2

Weekly downloads
1
License
MIT
Repository
github
Last release
9 years ago

Yet Another EventEmitter

yaee

Installation

npm install yaee --save

Usage

// ES5
var yaee = require("yaee");

// ES6
import {EventEmitter} from "yaee";

Examples

ES6

import {EventEmitter, CustomEvent} from "yaee";

class MyEvent extends CustomEvent {

  myValue: any;

  constructor(type: string, init: object) {
    super(type, init);
    this.defineProperty("myValue", init && init.myValue);
  }

  static create(type: string, myValue: any): MyEvent {
    return new MyEvent(type, {
      myValue: myValue,
    });
  }
}

class MyClass extends EventEmitter {

  myValue: number;

  constructor() {
    super();
    this.myValue = Math.random();
  }

  foo() {
    this.emit("foo", this.myValue);
  }

  bar() {
    this.dispatchEvent(new CustomEvent("bar", {
      detail: this.myValue,
    }));
  }

  my() {
    this.dispatchEvent(MyEvent.create("my", this.myValue));
  }
}

let my = new MyClass();
my.addEventListener("foo", (e) => {
  console.log("foo1", e.detail);
});
my.addEventListener("bar", (e) => {
  console.log("bar", e.detail);
});
my.on("foo", (e) => {
  console.log("foo2", e.detail);
});
my.on("my", (e) => {
  console.log("my", e.myValue);
});

my.foo();
my.bar();
my.my();
> babel-node examples/es6
foo1 0.4952439935877919
foo2 0.4952439935877919
bar 0.4952439935877919
my 0.4952439935877919

ES7 - Function bind

import {addEventListener as on, dispatchEvent, CustomEvent} from "yaee";

function emit(type: string, detail: any): void {
  this::dispatchEvent(new CustomEvent(type, {detail}));
}

class Foo {
  name: string = "foo";
  setName(name: string): void {
    let old = this.name;
    this.name = name;
    this::emit("nameChanged", {old, name});
  }
}

let foo = new Foo();
foo::on("nameChanged", (e) => {
  console.log("New name:", e.detail.old, "->", e.detail.name);
});

foo.setName("bar");
> babel-node examples/es7-bind
New name: foo -> bar

Type

import {EventEmitter, CustomEvent} from "yaee";

class MyEvent extends CustomEvent {
}

class MyEventEmitter extends EventEmitter {
  doSomething(): void {
    console.log("doSomething:");
    this.dispatchEvent(new CustomEvent("something"));
  }
  doSomethingElse(): void {
    console.log("doSomethingElse:");
    this.dispatchEvent(new MyEvent("something"));
  }
}

let my = new MyEventEmitter();
my.addEventListener("something", () => {
  console.log("  on:", "'something'");
});
my.addEventListener(CustomEvent, () => {
  console.log("  on:", "CustomEvent");
});
my.addEventListener(MyEvent, () => {
  console.log("  on:", "MyEvent");
});

my.doSomething();
my.doSomethingElse();
> babel-node examples/type
doSomething:
  on: 'something'
  on: CustomEvent
doSomethingElse:
  on: 'something'
  on: CustomEvent
  on: MyEvent

Node

var yaee = require("yaee");

var my = Object.create(yaee.EventEmitter.prototype, {
  myValue: {
    value: Math.random(),
  },
  foo: {
    value: function () {
      this.emit("foo", this.myValue);
    },
  },
});

my.on("foo", function (e) {
  console.log("foo", e.detail);
});

my.foo();
> babel-node examples/node
foo 0.7281268276274204