Skip to content

Instantly share code, notes, and snippets.

@made-by-chris
Last active December 5, 2016 04:37
Show Gist options
  • Save made-by-chris/7ffee0c10a52768fe258c3d638465a33 to your computer and use it in GitHub Desktop.
Save made-by-chris/7ffee0c10a52768fe258c3d638465a33 to your computer and use it in GitHub Desktop.
fm - minimal observer with model
const fm = (() => {
let model = {}
let observers = { fm_observe_all: [] }
return {
save: (key, val) => {
model[key] = val
emit(key)
},
silentSave: (key, val) => {
model[key] = val
},
emit: (key) => {
if (typeof observers[key] !== 'undefined') {
observers[key].forEach((observerCallback) => {
observerCallback(model[key])
})
}
observers['fm_observe_all'].forEach((observerCallback) => {
observerCallback({[key]: model[key]})
})
},
sub: (key, observerCallback) => {
if (typeof observers[key] === 'undefined') {
observers[key] = []
}
if (!observers[key].includes(observerCallback)) {
observers[key].push(observerCallback)
}
},
unsub: (key, observerCallback) => {
var index = observers[key].indexOf(observerCallback)
if (index > -1) {
observers[key].splice(index, 1)
}
}
}
})()
export default fm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment