Refresh the knockout model when a setter is called model
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 20 Jan 2013 21:01:46 +0100
branchmodel
changeset 496a06c98795b01
parent 495 f96c44dac48a
child 498 607f062485cc
Refresh the knockout model when a setter is called
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Sun Jan 20 21:01:10 2013 +0100
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Sun Jan 20 21:01:46 2013 +0100
     1.3 @@ -26,15 +26,13 @@
     1.4   */
     1.5  @ExtraJavaScript(resource = "org/apidesign/bck2brwsr/htmlpage/knockout-2.2.1.js")
     1.6  public final class Knockout {
     1.7 -
     1.8 -
     1.9      private Knockout() {
    1.10      }
    1.11      
    1.12 -    public static <M> void applyBindings(
    1.13 +    public static <M> Knockout applyBindings(
    1.14          Class<M> modelClass, M model, String[] propsGettersAndSetters
    1.15      ) {
    1.16 -        Object bindings = new Object();
    1.17 +        Knockout bindings = new Knockout();
    1.18          for (int i = 0; i < propsGettersAndSetters.length; i += 3) {
    1.19              bind(bindings, model, propsGettersAndSetters[i],
    1.20                  propsGettersAndSetters[i + 1],
    1.21 @@ -42,6 +40,13 @@
    1.22              );
    1.23          }
    1.24          applyBindings(bindings);
    1.25 +        return bindings;
    1.26 +    }
    1.27 +
    1.28 +    @JavaScriptBody(args = { "prop" }, body =
    1.29 +        "this[prop].valueHasMutated();"
    1.30 +    )
    1.31 +    public void valueHasMutated(String prop) {
    1.32      }
    1.33      
    1.34      @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter" }, body =
     2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Jan 20 21:01:10 2013 +0100
     2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Jan 20 21:01:46 2013 +0100
     2.3 @@ -108,9 +108,10 @@
     2.4                      List<String> propsGetSet = new ArrayList<String>();
     2.5                      generateProperties(w, p.properties(), propsGetSet);
     2.6                      generateComputedProperties(w, e.getEnclosedElements(), propsGetSet);
     2.7 +                    w.append("  private static org.apidesign.bck2brwsr.htmlpage.Knockout ko;\n");
     2.8                      if (!propsGetSet.isEmpty()) {
     2.9                          w.write("public static void applyBindings() {\n");
    2.10 -                        w.write("  org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings(");
    2.11 +                        w.write("  ko = org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings(");
    2.12                          w.write(className + ".class, new " + className + "(), ");
    2.13                          w.write("new String[] {\n");
    2.14                          String sep = "";
    2.15 @@ -270,6 +271,7 @@
    2.16              w.write("}\n");
    2.17              w.write("public static void " + gs[1] + "(" + tn + " v) {\n");
    2.18              w.write("  prop_" + p.name() + " = v;\n");
    2.19 +            w.write("  if (ko != null) ko.valueHasMutated(\"" + p.name() + "\");\n");
    2.20              w.write("}\n");
    2.21              
    2.22              props.add(p.name());