Better (from a static compilation point of view) to let JavaScript call the basic (non-private) getter and do conversion then
1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java Mon Mar 25 16:16:30 2013 +0100
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java Mon Mar 25 16:17:21 2013 +0100
1.3 @@ -19,6 +19,7 @@
1.4
1.5 import java.util.ArrayList;
1.6 import java.util.Collection;
1.7 +import org.apidesign.bck2brwsr.core.JavaScriptOnly;
1.8
1.9 /**
1.10 *
1.11 @@ -91,6 +92,11 @@
1.12 notifyChange();
1.13 return ret;
1.14 }
1.15 +
1.16 +
1.17 +
1.18 + @JavaScriptOnly(name = "koArray", value = "function() { return this.toArray___3Ljava_lang_Object_2(); }")
1.19 + private static native int koArray();
1.20
1.21 private void notifyChange() {
1.22 Knockout m = model;
2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Mar 25 16:16:30 2013 +0100
2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Mar 25 16:17:21 2013 +0100
2.3 @@ -18,6 +18,7 @@
2.4 package org.apidesign.bck2brwsr.htmlpage;
2.5
2.6 import java.lang.reflect.Method;
2.7 +import java.util.List;
2.8 import org.apidesign.bck2brwsr.core.ExtraJavaScript;
2.9 import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.10
2.11 @@ -48,7 +49,8 @@
2.12 bind(bindings, model, propsGettersAndSetters[i],
2.13 propsGettersAndSetters[i + 1],
2.14 propsGettersAndSetters[i + 2],
2.15 - getter.getReturnType().isPrimitive()
2.16 + getter.getReturnType().isPrimitive(),
2.17 + List.class.isAssignableFrom(getter.getReturnType())
2.18 );
2.19 } catch (NoSuchMethodException ex) {
2.20 throw new IllegalStateException(ex.getMessage());
2.21 @@ -74,10 +76,11 @@
2.22 public static void triggerEvent(String id, String ev) {
2.23 }
2.24
2.25 - @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter", "primitive" }, body =
2.26 + @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter", "primitive", "array" }, body =
2.27 "var bnd = {\n"
2.28 + " 'read': function() {\n"
2.29 + " var v = model[getter]();\n"
2.30 + + " if (array) v = v.koArray();\n"
2.31 + " return v;\n"
2.32 + " },\n"
2.33 + " 'owner': bindings\n"
2.34 @@ -90,7 +93,7 @@
2.35 + "bindings[prop] = ko['computed'](bnd);"
2.36 )
2.37 private static void bind(
2.38 - Object bindings, Object model, String prop, String getter, String setter, boolean primitive
2.39 + Object bindings, Object model, String prop, String getter, String setter, boolean primitive, boolean array
2.40 ) {
2.41 }
2.42
3.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Mar 25 16:16:30 2013 +0100
3.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Mar 25 16:17:21 2013 +0100
3.3 @@ -402,9 +402,6 @@
3.4 w.write(" prop_" + p.name() + ".assign(ko);\n");
3.5 w.write(" return prop_" + p.name() + ";\n");
3.6 w.write("}\n");
3.7 - w.write("private Object[] " + gs[0] + "ToArray() {\n");
3.8 - w.write(" return " + gs[0] + "().toArray(new Object[0]);\n");
3.9 - w.write("}\n");
3.10 } else {
3.11 w.write("private " + tn + " prop_" + p.name() + ";\n");
3.12 w.write("public " + tn + " " + gs[0] + "() {\n");
3.13 @@ -497,11 +494,6 @@
3.14 w.write(" }\n");
3.15 w.write("}\n");
3.16
3.17 - if (array) {
3.18 - w.write("private Object[] " + gs[0] + "ToArray() {\n");
3.19 - w.write(" return " + gs[0] + "().toArray(new Object[0]);\n");
3.20 - w.write("}\n");
3.21 - }
3.22 props.add(e.getSimpleName().toString());
3.23 props.add(gs[2]);
3.24 props.add(null);
3.25 @@ -530,7 +522,7 @@
3.26 return new String[] {
3.27 "get" + n,
3.28 null,
3.29 - "get" + nu + "ToArray___3Ljava_lang_Object_2",
3.30 + "get" + nu + "__Ljava_util_List_2",
3.31 null
3.32 };
3.33 }