Namespace("sample.widget") .use("brook *") .use("brook.model *") .use("brook.util *") .define(function(ns){ var observeEvent = function(element, eventName, promise) { element.addEventListener(eventName, function(event) { promise.run(event) }, false ); }; //define view method var updateView = function(element) { return ns.promise(function(next, value) { element.innerHTML += value + "<br>"; next(); }); }; //define model var model = ns.createModel(); model.addMethod("update", ns.promise(function(next, value) { //update model //for example, connectToSomeDataBase(); //then, Model to View next("Hello World!"); })); ns.provide({ registerElement: function(button, element) { // handle user action and notify to the model // View to Model observeEvent(button, "click", model.notify("update")); //observing model update ns.from(model.method("update")).bind(updateView(element)).subscribe(); } }); }); //entry point Namespace.use("sample.widget").apply(function(ns) { ns.sample.widget.registerElement( document.getElementById("sampleButton"), document.getElementById("output") ); });
sample code output here
Daichi Hiroki (hirokidaichi@gmail.com)
Kato Kazuyoshi (kato.kazuyoshi@gmail.com)
hirokidaichi (hirokidaichi@gmail.com)
You can download this project in either zip or tar formats.
You can also clone the project with Git by running:
$ git clone git://github.com/hirokidaichi/brook