Skip to content

Instantly share code, notes, and snippets.

@faforty
Created February 28, 2020 10:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save faforty/fe5085551846af597b487142056f3c36 to your computer and use it in GitHub Desktop.
Save faforty/fe5085551846af597b487142056f3c36 to your computer and use it in GitHub Desktop.
Dispatcher
import DispatcherEvent from './DispatcherEvent'
export default class Dispatcher {
constructor () {
this.events = {}
}
dispatch (eventName, data) {
const event = this.events[eventName]
if (event) {
event.fire(data)
}
}
on (eventName, callback) {
let event = this.events[eventName]
if (!event) {
event = new DispatcherEvent(eventName)
this.events[eventName] = event
}
event.registerCallback(callback)
}
off (eventName, callback) {
const event = this.events[eventName]
if (event && event.callbacks.indexOf(callback) > -1) {
event.unregisterCallback(callback)
if (event.callbacks.length === 0) {
delete this.events[eventName]
}
}
}
}
export default class DispatcherEvent {
constructor (eventName) {
this.eventName = eventName
this.callbacks = []
}
registerCallback (callback) {
this.callbacks.push(callback)
}
unregisterCallback (callback) {
const index = this.callbacks.indexOf(callback)
if (index > -1) {
this.callbacks.splice(index, 1)
}
}
fire (data) {
const callbacks = this.callbacks.slice(0)
callbacks.forEach((callback) => {
callback(data)
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment