Skip to content

Instantly share code, notes, and snippets.

@colingourlay
Created August 13, 2014 04:32
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 colingourlay/b77b6a7025cbac7f0868 to your computer and use it in GitHub Desktop.
Save colingourlay/b77b6a7025cbac7f0868 to your computer and use it in GitHub Desktop.
ES3 Observable
var Observable = require("./index.js")
module.exports = computed
function computed(observables, lambda) {
var values = []
function listener(i) {
return function (value) {
values[i] = value
result.set(lambda.apply(null, values))
};
}
for (var i = 0, len = observables.length; i < len; i++) {
values.push(observables[i]())
observables[i](listener(i))
}
var result = Observable(lambda.apply(null, values))
return result
}
module.exports = Observable
function Observable(value) {
var listeners = []
value = value === undefined ? null : value
observable.set = function (v) {
value = v
for (var i = 0, len = listeners.length; i < len; i++) {
listeners[i](v)
}
}
return observable
function observable(listener) {
if (!listener) {
return value
}
listeners.push(listener)
return function remove() {
for (var i = 0, len = listeners.length; i < len; i++) {
if (listeners[i] === listener) {
listeners.splice(i, 1)
break
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment