1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Mar 31 13:26:27 2013 +0200
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Tue Apr 02 15:40:08 2013 +0200
1.3 @@ -115,6 +115,7 @@
1.4 try {
1.5 StringWriter body = new StringWriter();
1.6 List<String> propsGetSet = new ArrayList<>();
1.7 + List<String> functions = new ArrayList<>();
1.8 Map<String, Collection<String>> propsDeps = new HashMap<>();
1.9 if (!generateComputedProperties(body, m.properties(), e.getEnclosedElements(), propsGetSet, propsDeps)) {
1.10 ok = false;
1.11 @@ -122,6 +123,9 @@
1.12 if (!generateProperties(e, body, m.properties(), propsGetSet, propsDeps)) {
1.13 ok = false;
1.14 }
1.15 + if (!generateFunctions(e, body, className, e.getEnclosedElements(), functions)) {
1.16 + ok = false;
1.17 + }
1.18 FileObject java = processingEnv.getFiler().createSourceFile(pkg + '.' + className, e);
1.19 w = new OutputStreamWriter(java.openOutputStream());
1.20 try {
1.21 @@ -139,7 +143,7 @@
1.22 w.append(" ko = org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings(this, ");
1.23 writeStringArray(propsGetSet, w);
1.24 w.append(", ");
1.25 - writeStringArray(Collections.<String>emptyList(), w);
1.26 + writeStringArray(functions, w);
1.27 w.append(" );\n");
1.28 w.append(" };\n");
1.29 w.append("}\n");
2.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java Sun Mar 31 13:26:27 2013 +0200
2.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java Tue Apr 02 15:40:08 2013 +0200
2.3 @@ -138,6 +138,31 @@
2.4 txt = childText("ul", 0);
2.5 assert "changed".equals(txt) : "Expecting 'changed': " + txt;
2.6 }
2.7 +
2.8 + @HtmlFragment(
2.9 + "<ul id='ul' data-bind='foreach: people'>\n"
2.10 + + " <li data-bind='text: $data.firstName, click: changeSex'></li>\n"
2.11 + + "</ul>\n"
2.12 + )
2.13 + @BrwsrTest public void onPersonFunction() {
2.14 + KnockoutModel m = new KnockoutModel();
2.15 +
2.16 + final Person first = new Person();
2.17 + first.setFirstName("first");
2.18 + first.setSex(Sex.MALE);
2.19 + m.getPeople().add(first);
2.20 +
2.21 +
2.22 + m.applyBindings();
2.23 +
2.24 + int cnt = countChildren("ul");
2.25 + assert cnt == 1 : "One child, but was " + cnt;
2.26 +
2.27 +
2.28 + triggerChildClick("ul", 0);
2.29 +
2.30 + assert first.getSex() == Sex.FEMALE : "Transverted to female: " + first.getSex();
2.31 + }
2.32
2.33 @OnFunction
2.34 static void call(KnockoutModel m, String data) {
3.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java Sun Mar 31 13:26:27 2013 +0200
3.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java Tue Apr 02 15:40:08 2013 +0200
3.3 @@ -19,6 +19,7 @@
3.4
3.5 import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty;
3.6 import org.apidesign.bck2brwsr.htmlpage.api.Model;
3.7 +import org.apidesign.bck2brwsr.htmlpage.api.OnFunction;
3.8 import org.apidesign.bck2brwsr.htmlpage.api.Property;
3.9
3.10 /**
3.11 @@ -40,4 +41,13 @@
3.12 public static String sexType(Sex sex) {
3.13 return sex == null ? "unknown" : sex.toString();
3.14 }
3.15 +
3.16 + @OnFunction
3.17 + static void changeSex(Person p) {
3.18 + if (p.getSex() == Sex.MALE) {
3.19 + p.setSex(Sex.FEMALE);
3.20 + } else {
3.21 + p.setSex(Sex.MALE);
3.22 + }
3.23 + }
3.24 }