Skip to content

Instantly share code, notes, and snippets.

@made-by-chris
Created December 15, 2016 04:28
Show Gist options
  • Select an option

  • Save made-by-chris/4fd6941e8fafd1605a240c15d4cc32cd to your computer and use it in GitHub Desktop.

Select an option

Save made-by-chris/4fd6941e8fafd1605a240c15d4cc32cd to your computer and use it in GitHub Desktop.
fm
const fm = (() => {
const model = {}
let observers = { fm_observe_all : [] }
function sub (key, observerCallback) {
if (typeof observers[key] === 'undefined') {
observers[key] = []
}
if (!observers[key].includes(observerCallback)) {
observers[key].push(observerCallback)
}
}
function unsub (key, observerCallback) {
var index = observers[key].indexOf(observerCallback)
if (index > -1) {
observers[key].splice(index, 1)
}
}
function emit (key) {
if (typeof observers[key] !== 'undefined') {
observers[key].forEach((observerCallback) => {
observerCallback(model[key])
})
}
observers['fm_observe_all'].forEach((observerCallback) => {
observerCallback({[key]: model[key]})
})
}
function save (key, val) {
model[key] = val
emit(key)
}
function silentSave (key, val) {
model[key] = val
}
function val (key) {
return model[key]
}
return {
sub,
unsub,
emit,
save,
silentSave,
val
}
})()
export default fm;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment