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 }