# HG changeset patch # User Jaroslav Tulach # Date 1364224641 -3600 # Node ID 13dc5ada296b9cd6a22ad07a20926bbe7b8f8a8d # Parent 88540bb74300853025b9f7633b753a6cae4a566a Better (from a static compilation point of view) to let JavaScript call the basic (non-private) getter and do conversion then diff -r 88540bb74300 -r 13dc5ada296b javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java Mon Mar 25 16:16:30 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java Mon Mar 25 16:17:21 2013 +0100 @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.Collection; +import org.apidesign.bck2brwsr.core.JavaScriptOnly; /** * @@ -91,6 +92,11 @@ notifyChange(); return ret; } + + + + @JavaScriptOnly(name = "koArray", value = "function() { return this.toArray___3Ljava_lang_Object_2(); }") + private static native int koArray(); private void notifyChange() { Knockout m = model; diff -r 88540bb74300 -r 13dc5ada296b javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Mar 25 16:16:30 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Mon Mar 25 16:17:21 2013 +0100 @@ -18,6 +18,7 @@ package org.apidesign.bck2brwsr.htmlpage; import java.lang.reflect.Method; +import java.util.List; import org.apidesign.bck2brwsr.core.ExtraJavaScript; import org.apidesign.bck2brwsr.core.JavaScriptBody; @@ -48,7 +49,8 @@ bind(bindings, model, propsGettersAndSetters[i], propsGettersAndSetters[i + 1], propsGettersAndSetters[i + 2], - getter.getReturnType().isPrimitive() + getter.getReturnType().isPrimitive(), + List.class.isAssignableFrom(getter.getReturnType()) ); } catch (NoSuchMethodException ex) { throw new IllegalStateException(ex.getMessage()); @@ -74,10 +76,11 @@ public static void triggerEvent(String id, String ev) { } - @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter", "primitive" }, body = + @JavaScriptBody(args = { "bindings", "model", "prop", "getter", "setter", "primitive", "array" }, body = "var bnd = {\n" + " 'read': function() {\n" + " var v = model[getter]();\n" + + " if (array) v = v.koArray();\n" + " return v;\n" + " },\n" + " 'owner': bindings\n" @@ -90,7 +93,7 @@ + "bindings[prop] = ko['computed'](bnd);" ) private static void bind( - Object bindings, Object model, String prop, String getter, String setter, boolean primitive + Object bindings, Object model, String prop, String getter, String setter, boolean primitive, boolean array ) { } diff -r 88540bb74300 -r 13dc5ada296b javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Mar 25 16:16:30 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Mar 25 16:17:21 2013 +0100 @@ -402,9 +402,6 @@ w.write(" prop_" + p.name() + ".assign(ko);\n"); w.write(" return prop_" + p.name() + ";\n"); w.write("}\n"); - w.write("private Object[] " + gs[0] + "ToArray() {\n"); - w.write(" return " + gs[0] + "().toArray(new Object[0]);\n"); - w.write("}\n"); } else { w.write("private " + tn + " prop_" + p.name() + ";\n"); w.write("public " + tn + " " + gs[0] + "() {\n"); @@ -497,11 +494,6 @@ w.write(" }\n"); w.write("}\n"); - if (array) { - w.write("private Object[] " + gs[0] + "ToArray() {\n"); - w.write(" return " + gs[0] + "().toArray(new Object[0]);\n"); - w.write("}\n"); - } props.add(e.getSimpleName().toString()); props.add(gs[2]); props.add(null); @@ -530,7 +522,7 @@ return new String[] { "get" + n, null, - "get" + nu + "ToArray___3Ljava_lang_Object_2", + "get" + nu + "__Ljava_util_List_2", null }; }