javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java
branchmodel
changeset 530 3ce069ec3312
parent 505 4198be34b516
child 532 b5150a06c5d1
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Mon Jan 21 13:43:40 2013 +0100
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java	Tue Jan 22 21:57:27 2013 +0100
     1.3 @@ -17,8 +17,10 @@
     1.4   */
     1.5  package org.apidesign.bck2brwsr.htmlpage;
     1.6  
     1.7 +import java.lang.reflect.Method;
     1.8  import org.apidesign.bck2brwsr.core.ExtraJavaScript;
     1.9  import org.apidesign.bck2brwsr.core.JavaScriptBody;
    1.10 +import org.apidesign.bck2brwsr.htmlpage.api.Element;
    1.11  
    1.12  /** Provides binding between models and 
    1.13   *
    1.14 @@ -40,11 +42,17 @@
    1.15          if (bindings == null) {
    1.16              bindings = new Knockout();
    1.17          }
    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 -                propsGettersAndSetters[i + 2]
    1.22 -            );
    1.23 +        for (int i = 0; i < propsGettersAndSetters.length; i += 4) {
    1.24 +            try {
    1.25 +                Method getter = modelClass.getMethod(propsGettersAndSetters[i + 3]);
    1.26 +                bind(bindings, model, propsGettersAndSetters[i],
    1.27 +                    propsGettersAndSetters[i + 1],
    1.28 +                    propsGettersAndSetters[i + 2],
    1.29 +                    getter.getReturnType().isPrimitive()
    1.30 +                );
    1.31 +            } catch (NoSuchMethodException ex) {
    1.32 +                Element.alert("Error: " + ex.getMessage());
    1.33 +            }
    1.34          }
    1.35          applyBindings(bindings);
    1.36          return bindings;
    1.37 @@ -56,7 +64,12 @@
    1.38      public void valueHasMutated(String prop) {
    1.39      }
    1.40      
    1.41 -    @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter" }, body =
    1.42 +
    1.43 +    @JavaScriptBody(args = { "id", "ev" }, body = "ko.utils.triggerEvent(window.document.getElementById(id), ev.substring(2));")
    1.44 +    public static void triggerEvent(String id, String ev) {
    1.45 +    }
    1.46 +    
    1.47 +    @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter", "primitive" }, body =
    1.48            "var bnd = {\n"
    1.49          + "  read: function() {\n"
    1.50          + "    var v = model[getter]();\n"
    1.51 @@ -66,13 +79,13 @@
    1.52          + "};\n"
    1.53          + "if (setter != null) {\n"
    1.54          + "  bnd.write = function(val) {\n"
    1.55 -        + "    model[setter](new Number(val));\n"
    1.56 +        + "    model[setter](primitive ? new Number(val) : val);\n"
    1.57          + "  };\n"
    1.58          + "}\n"
    1.59          + "bindings[prop] = ko.computed(bnd);"
    1.60      )
    1.61      private static void bind(
    1.62 -        Object bindings, Object model, String prop, String getter, String setter
    1.63 +        Object bindings, Object model, String prop, String getter, String setter, boolean primitive
    1.64      ) {
    1.65      }
    1.66