Skip to content

Instantly share code, notes, and snippets.

@joona
Created December 15, 2016 11:47
Show Gist options
  • Save joona/ef6990bd16635033d8da628faad8242a to your computer and use it in GitHub Desktop.
Save joona/ef6990bd16635033d8da628faad8242a to your computer and use it in GitHub Desktop.
Store factory, to be used with flux implementation, using CustomEvents
export default function storeFactory(obj) {
var element = document.createElement('div');
element.setAttribute('data-store', true);
var store = {};
store._element = element;
store._listeners = {};
store.listen = (name, callback) => {
element.addEventListener(name, e => {
callback(e, e.details);
});
store._listeners[name] || (store._listeners[name] = []);
store._listeners[name].push(callback);
};
store.dispatch = (name, details) => {
var event = new CustomEvent(name);
event.details = details;
element.dispatchEvent(event);
};
Object.assign(store, obj);
return store;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment