Better (from a static compilation point of view) to let JavaScript call the basic (non-private) getter and do conversion then model
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 25 Mar 2013 16:17:21 +0100
branchmodel
changeset 88713dc5ada296b
parent 886 88540bb74300
child 888 e2e65ab49293
Better (from a static compilation point of view) to let JavaScript call the basic (non-private) getter and do conversion then
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java
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/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          }