# HG changeset patch # User Jaroslav Tulach # Date 1358712106 -3600 # Node ID a06c98795b013a88c1d629b615c88127f7cab85d # Parent f96c44dac48abd9abf0e129717d73e7ec2e76e9f Refresh the knockout model when a setter is called diff -r f96c44dac48a -r a06c98795b01 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Sun Jan 20 21:01:10 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Sun Jan 20 21:01:46 2013 +0100 @@ -26,15 +26,13 @@ */ @ExtraJavaScript(resource = "org/apidesign/bck2brwsr/htmlpage/knockout-2.2.1.js") public final class Knockout { - - private Knockout() { } - public static void applyBindings( + public static Knockout applyBindings( Class modelClass, M model, String[] propsGettersAndSetters ) { - Object bindings = new Object(); + Knockout bindings = new Knockout(); for (int i = 0; i < propsGettersAndSetters.length; i += 3) { bind(bindings, model, propsGettersAndSetters[i], propsGettersAndSetters[i + 1], @@ -42,6 +40,13 @@ ); } applyBindings(bindings); + return bindings; + } + + @JavaScriptBody(args = { "prop" }, body = + "this[prop].valueHasMutated();" + ) + public void valueHasMutated(String prop) { } @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter" }, body = diff -r f96c44dac48a -r a06c98795b01 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Jan 20 21:01:10 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Jan 20 21:01:46 2013 +0100 @@ -108,9 +108,10 @@ List propsGetSet = new ArrayList(); generateProperties(w, p.properties(), propsGetSet); generateComputedProperties(w, e.getEnclosedElements(), propsGetSet); + w.append(" private static org.apidesign.bck2brwsr.htmlpage.Knockout ko;\n"); if (!propsGetSet.isEmpty()) { w.write("public static void applyBindings() {\n"); - w.write(" org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings("); + w.write(" ko = org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings("); w.write(className + ".class, new " + className + "(), "); w.write("new String[] {\n"); String sep = ""; @@ -270,6 +271,7 @@ w.write("}\n"); w.write("public static void " + gs[1] + "(" + tn + " v) {\n"); w.write(" prop_" + p.name() + " = v;\n"); + w.write(" if (ko != null) ko.valueHasMutated(\"" + p.name() + "\");\n"); w.write("}\n"); props.add(p.name());