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