rx-event-manager
v0.5.3
Published
Rx Event Manager
Downloads
4
Maintainers
Readme
Rx Event Manager
motivation
To allow inter-modules communication in Rx way. Also, it memorize Rx.Disposable
instances where we can simply call dispose
without explicitly stored returned subscription.
API
observe
return a Rx.Observable
instance with given event
name
observe given event
EventManager.observe('hello').
subscribe(function (data) {
// data.answer === 42;
});
EventManager.fire('hello', { answer: 42 })
on
a shorthand of combination of observe
and subscribe
which returns an instance of Rx.Observer
listen to given event
EventManager.on('hello', function (data) {
// data.answer === 42;
});
EventManager.fire('hello', { answer: 42 });
fire
dispatch event with given event
and data
// fire 'hello' event which which has data { answer: 42 }
EventManager.fire('hello', { answer: 42 });
// fire 'answer' event which has data `42`
EventManager.fire('answer', 42);
once
listen to given event
only once.
EventManager.once('hello',
function (data) {
console.log(data.value);
},
function (ex) {
// nada
}.
function () {
console.log('complete');
}
);
EventManager.fire('hello', { value: 'hello' });
> hello
> complete
EventManager.fire('hello', { value: 'world' })
// nothing happened
latest
emit sequence immediately with most recent value
if given event
got fired before.
EventManager.fire('hello', 42);
EventManager.latest('hello', function onNext(value) {
console.log('callback %s', value);
});
> callback 42
EventManager.latest('hello').
subscribe(function (value) {
console.log('observable %s', value);
});
> observable 42
EventManager.fire('hello', 'world');
> callback world
> observable world
change
emit sequences only if data changed
EventManager.change('hello').
subscribe(function (value) {
console.log('hello %s', value);
});
EventManager.fire('hello', 1);
> 1
EventManager.fire('hello', 1);
// nothing happened
EventManager.fire('hello', 2);
> 2
function comparer(x, y) {
return x.value === y.value;
}
EventManager.change('hello', comparer).
subscribe(function (data) {
console.log('observable %s', data.value);
});
EventManager.change('hello', comparer, function (data) {
console.log('callback %s', data.value);
});
EventManager.fire('hello', { value: 1 });
> observable 1
> callback 1
EventManager.fire('hello', { value: 1 });
// nothing happened
EventManager.fire('hello', { value: 2 });
> observable 2
> callback 2
dispose
dispose and remove given event
// get disposable instance from `on` method
EventManager.on('hello', function (data) {
console.log(data.value);
});
EventManager.fire('hello', { value: 'hello' });
> hello
EventManager.dispose('hello');
EventManager.fire('hello', { value: 'world' })
// nothing happened
// get disposable instance from `once` method
EventManager.once('hello', function (data) {
console.log(data.value);
});
EventManager.dispose('hello');
EventManager.fire('hello', { value: 'world' })
// nothing happened
// get disposable instance from `observe` method
EventManager.observe('hello').subscribe(function (data) {
console.log(data.value);
});
EventManager.fire('hello', { value: 'world' })
> world
EventManager.dispose('hello');
EventManager.fire('hello', { value: 'world' })
// nothing happened
// via `observe` method which has extra operators
EventManager.observe('hello').
filter(function (value) {
return 'string' === typeof value;
}).
subscribe(function (data) {
console.log(data.value);
});
EventManager.fire('hello', { value: 42 })
//nothing happened
EventManager.fire('hello', { value: 'world' })
> world
EventManager.dispose('hello');
EventManager.fire('hello', { value: 'world' })
// nothing happened
disposeAll
dispose and remove all event subscriptions
EventManager.on('hello', function (data) {
console.log(data.value);
});
EventManager.fire('hello', { value: 'hello' });
> hello
EventManager.disposeAll();
EventManager.fire('hello', { value: 'world' })
// nothing happened