# HG changeset patch # User Jaroslav Tulach # Date 1364910008 -7200 # Node ID 81dcd71877d5cadc338338a98fcd86878e99eddc # Parent fdf8406908612a5ca02ba417b131980437fc39c6 @OnFunction can be in @Model classes diff -r fdf840690861 -r 81dcd71877d5 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Mar 31 13:26:27 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Tue Apr 02 15:40:08 2013 +0200 @@ -115,6 +115,7 @@ try { StringWriter body = new StringWriter(); List propsGetSet = new ArrayList<>(); + List functions = new ArrayList<>(); Map> propsDeps = new HashMap<>(); if (!generateComputedProperties(body, m.properties(), e.getEnclosedElements(), propsGetSet, propsDeps)) { ok = false; @@ -122,6 +123,9 @@ if (!generateProperties(e, body, m.properties(), propsGetSet, propsDeps)) { ok = false; } + if (!generateFunctions(e, body, className, e.getEnclosedElements(), functions)) { + ok = false; + } FileObject java = processingEnv.getFiler().createSourceFile(pkg + '.' + className, e); w = new OutputStreamWriter(java.openOutputStream()); try { @@ -139,7 +143,7 @@ w.append(" ko = org.apidesign.bck2brwsr.htmlpage.Knockout.applyBindings(this, "); writeStringArray(propsGetSet, w); w.append(", "); - writeStringArray(Collections.emptyList(), w); + writeStringArray(functions, w); w.append(" );\n"); w.append(" };\n"); w.append("}\n"); diff -r fdf840690861 -r 81dcd71877d5 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java Sun Mar 31 13:26:27 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/KnockoutTest.java Tue Apr 02 15:40:08 2013 +0200 @@ -138,6 +138,31 @@ txt = childText("ul", 0); assert "changed".equals(txt) : "Expecting 'changed': " + txt; } + + @HtmlFragment( + "
    \n" + + "
  • \n" + + "
\n" + ) + @BrwsrTest public void onPersonFunction() { + KnockoutModel m = new KnockoutModel(); + + final Person first = new Person(); + first.setFirstName("first"); + first.setSex(Sex.MALE); + m.getPeople().add(first); + + + m.applyBindings(); + + int cnt = countChildren("ul"); + assert cnt == 1 : "One child, but was " + cnt; + + + triggerChildClick("ul", 0); + + assert first.getSex() == Sex.FEMALE : "Transverted to female: " + first.getSex(); + } @OnFunction static void call(KnockoutModel m, String data) { diff -r fdf840690861 -r 81dcd71877d5 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java Sun Mar 31 13:26:27 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/PersonImpl.java Tue Apr 02 15:40:08 2013 +0200 @@ -19,6 +19,7 @@ import org.apidesign.bck2brwsr.htmlpage.api.ComputedProperty; import org.apidesign.bck2brwsr.htmlpage.api.Model; +import org.apidesign.bck2brwsr.htmlpage.api.OnFunction; import org.apidesign.bck2brwsr.htmlpage.api.Property; /** @@ -40,4 +41,13 @@ public static String sexType(Sex sex) { return sex == null ? "unknown" : sex.toString(); } + + @OnFunction + static void changeSex(Person p) { + if (p.getSex() == Sex.MALE) { + p.setSex(Sex.FEMALE); + } else { + p.setSex(Sex.MALE); + } + } }