flux in ES7 by @roman01la
function example(){
class Actions {
@Observable
static processSomething
}
class Store {
constructor(name){
this.name = name;
}
@Observable
updater
@Observe(Actions.processSomething)
processHandler = function(data) {
this.updater.notify(this.name + " processed " + data)
}
}
var myStoreA = new Store("Store A");
var myStoreB = new Store("Store B");
var print = function(result){
console.log(result);
}
myStoreA.updater.on(print)
myStoreB.updater.on(print)
Actions.processSomething.notify("1010110")
}
///All the magic happens down here
class ObservableClass {
subscriptions = [];
on = function(handler){
this.subscriptions.push(handler)
}
notify = function(){
var args = arguments;
for(var i = 0 ; i < this.subscriptions.length; i++){
this.subscriptions[i].apply(null,args)
}
}
}
function Observable(target,key,e) {
e.initializer = function(){ return new ObservableClass(); }
}
function Singleton(target,key,e) {
e.initializer = function(){ return new target(); }
}
function Observe(observable) {
return function(classType,key,d) {
var tempInitializer = d.initializer;
var blah = function() {};
blah.initializer = function(){
var val = tempInitializer.apply(arguments);
observable.on(val.bind(this))
return val;
}
return blah;
}
}
example();