diff -r b41a01a6d998 -r 9ddce13e8ff9 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Apr 15 07:08:55 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Apr 15 18:30:30 2013 +0200 @@ -82,9 +82,18 @@ + " ret.toString = function() { return 'KObject' + cnt + ' value: ' + value + ' props: ' + Object.keys(this); };" + " return ret;" + " };" + + " scope.KObject.array= function() {" + " return Array.prototype.slice.call(arguments);" + " };" + + + " scope.KObject.expose = function(bindings, model, prop, sig) {" + + " bindings[prop] = function(data, ev) {" + + " console.log(\" callback on prop: \" + prop);" + + " model[sig](data, ev);" + + " };" + + " };" + + "})(window); window.KObject" ); } @@ -186,6 +195,8 @@ try { KOProperty kop = new KOProperty(model, strip(getter), strip(setter)); bnd.call("bnd", ko, bindings, kop, prop, "get", "set", primitive, array); + + ((JSObject)bindings).setMember("koModel", model); LOG.log(Level.INFO, "binding defined for {0}: {1}", new Object[]{prop, ((JSObject)bindings).getMember(prop)}); } catch (Throwable ex) { LOG.log(Level.INFO, "binding failed for {0} on {1}", new Object[]{prop, bindings}); @@ -205,6 +216,12 @@ private static void expose( Object bindings, Object model, String prop, String sig ) { + try { + KOFunction f = new KOFunction(model, strip(sig)); + KObject.call("expose", bindings, f, prop, "call"); + } catch (Throwable ex) { + LOG.log(Level.SEVERE, "Cannot define binding for " + prop + " in model " + model, ex); + } } @JavaScriptBody(args = { "bindings" }, body = "ko.applyBindings(bindings);")