javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
branchmodel
changeset 909 e51a474fcf79
parent 908 3e023bea2da4
child 911 fdf840690861
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Mar 31 06:46:25 2013 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java	Sun Mar 31 12:01:38 2013 +0200
     1.3 @@ -135,16 +135,13 @@
     1.4                  w.append("  private org.apidesign.bck2brwsr.htmlpage.Knockout ko;\n");
     1.5                  w.append(body.toString());
     1.6                  w.append("  private static Class<" + e.getSimpleName() + "> modelFor() { return null; }\n");
     1.7 -                for (int i = 0; i < propsGetSet.size(); i += 4) {
     1.8 -                    w.append("  @JavaScriptOnly(name=\"" + propsGetSet.get(i) + "\",\n");
     1.9 -                    w.append("    value=\"function() { ");
    1.10 -                    final String setter = propsGetSet.get(i + 2);
    1.11 -                    if (setter != null) {
    1.12 -                        w.append("if (arguments.length == 1) this." + setter + "(arguments[0]); ");
    1.13 -                    }
    1.14 -                    w.append("return this." + propsGetSet.get(i + 1) + "();}\")\n");
    1.15 -                    w.append("  private static native void __accessor" + i + "();");
    1.16 -                }
    1.17 +                w.append("  public ").append(className).append("() {\n");
    1.18 +                w.append("    ko = org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings(this, ");
    1.19 +                writeStringArray(propsGetSet, w);
    1.20 +                w.append(", ");
    1.21 +                writeStringArray(Collections.<String>emptyList(), w);
    1.22 +                w.append("    );\n");
    1.23 +                w.append("  };\n");
    1.24                  w.append("}\n");
    1.25              } finally {
    1.26                  w.close();
    1.27 @@ -219,25 +216,10 @@
    1.28                      w.write("public " + className + " applyBindings() {\n");
    1.29                      w.write("  ko = org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings(");
    1.30                      w.write(className + ".class, this, ");
    1.31 -                    w.write("new String[] {\n");
    1.32 -                    String sep = "";
    1.33 -                    for (String n : propsGetSet) {
    1.34 -                        w.write(sep);
    1.35 -                        if (n == null) {
    1.36 -                            w.write("    null");
    1.37 -                        } else {
    1.38 -                            w.write("    \"" + n + "\"");
    1.39 -                        }
    1.40 -                        sep = ",\n";
    1.41 -                    }
    1.42 -                    w.write("\n  }, new String[] {\n");
    1.43 -                    sep = "";
    1.44 -                    for (String n : functions) {
    1.45 -                        w.write(sep);
    1.46 -                        w.write(n);
    1.47 -                        sep = ",\n";
    1.48 -                    }
    1.49 -                    w.write("\n  });\n  return this;\n}\n");
    1.50 +                    writeStringArray(propsGetSet, w);
    1.51 +                    w.append(", ");
    1.52 +                    writeStringArray(functions, w);
    1.53 +                    w.write(");\n  return this;\n}\n");
    1.54  
    1.55                      w.write("public void triggerEvent(Element e, OnEvent ev) {\n");
    1.56                      w.write("  org.apidesign.bck2brwsr.htmlpage.Knockout.triggerEvent(e.getId(), ev.getElementPropertyName());\n");
    1.57 @@ -681,8 +663,8 @@
    1.58              body.append(");\n");
    1.59              body.append("}\n");
    1.60              
    1.61 -            functions.add('\"' + n + '\"');
    1.62 -            functions.add('\"' + n + "__VLjava_lang_Object_2Ljava_lang_Object_2" + '\"');
    1.63 +            functions.add(n);
    1.64 +            functions.add(n + "__VLjava_lang_Object_2Ljava_lang_Object_2");
    1.65          }
    1.66          return true;
    1.67      }
    1.68 @@ -762,4 +744,19 @@
    1.69          }
    1.70          return models.values().contains(e.getSimpleName().toString());
    1.71      }
    1.72 +
    1.73 +    private void writeStringArray(List<String> strings, Writer w) throws IOException {
    1.74 +        w.write("new String[] {\n");
    1.75 +        String sep = "";
    1.76 +        for (String n : strings) {
    1.77 +            w.write(sep);
    1.78 +            if (n == null) {
    1.79 +                w.write("    null");
    1.80 +            } else {
    1.81 +                w.write("    \"" + n + "\"");
    1.82 +            }
    1.83 +            sep = ",\n";
    1.84 +        }
    1.85 +        w.write("\n  }");
    1.86 +    }
    1.87  }