1.1 --- a/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java Fri Aug 09 16:50:00 2013 +0200
1.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java Fri Aug 09 16:56:47 2013 +0200
1.3 @@ -169,7 +169,53 @@
1.4 + "</ul>\n"
1.5 );
1.6 try {
1.7 - Pair m = Models.bind(new Pair("First", "Last"), newContext());
1.8 + Pair m = Models.bind(new Pair("First", "Last", null), newContext());
1.9 + m.applyBindings();
1.10 +
1.11 + int cnt = countChildren("ul");
1.12 + assert cnt == 2 : "Two children now, but was " + cnt;
1.13 +
1.14 + triggerChildClick("ul", 1);
1.15 +
1.16 + assert "Last".equals(m.getFirstName()) : "We got callback from 2nd child " + m.getFirstName();
1.17 + } finally {
1.18 + Utils.exposeHTML(KnockoutTest.class, "");
1.19 + }
1.20 + }
1.21 +
1.22 + @KOTest public void displayContentOfComputedArrayOnASubpair() throws Exception {
1.23 + Object exp = Utils.exposeHTML(KnockoutTest.class,
1.24 + "<div data-bind='with: next'>\n"
1.25 + + "<ul id='ul' data-bind='foreach: bothNames'>\n"
1.26 + + " <li data-bind='text: $data, click: $root.assignFirstName'/>\n"
1.27 + + "</ul>"
1.28 + + "</div>\n"
1.29 + );
1.30 + try {
1.31 + Pair m = Models.bind(new Pair(null, null, new Pair("First", "Last", null)), newContext());
1.32 + m.applyBindings();
1.33 +
1.34 + int cnt = countChildren("ul");
1.35 + assert cnt == 2 : "Two children now, but was " + cnt;
1.36 +
1.37 + triggerChildClick("ul", 1);
1.38 +
1.39 + assert "Last".equals(m.getFirstName()) : "We got callback from 2nd child " + m.getFirstName();
1.40 + } finally {
1.41 + Utils.exposeHTML(KnockoutTest.class, "");
1.42 + }
1.43 + }
1.44 +
1.45 + @KOTest public void displayContentOfComputedArrayOnComputedASubpair() throws Exception {
1.46 + Object exp = Utils.exposeHTML(KnockoutTest.class,
1.47 + "<div data-bind='with: nextOne'>\n"
1.48 + + "<ul id='ul' data-bind='foreach: bothNames'>\n"
1.49 + + " <li data-bind='text: $data, click: $root.assignFirstName'/>\n"
1.50 + + "</ul>"
1.51 + + "</div>\n"
1.52 + );
1.53 + try {
1.54 + Pair m = Models.bind(new Pair(null, null, new Pair("First", "Last", null)), newContext());
1.55 m.applyBindings();
1.56
1.57 int cnt = countChildren("ul");
2.1 --- a/json-tck/src/main/java/net/java/html/json/tests/PairModel.java Fri Aug 09 16:50:00 2013 +0200
2.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/PairModel.java Fri Aug 09 16:56:47 2013 +0200
2.3 @@ -34,6 +34,7 @@
2.4 @Model(className = "Pair", properties = {
2.5 @Property(name = "firstName", type = String.class),
2.6 @Property(name = "lastName", type = String.class),
2.7 + @Property(name = "next", type = Pair.class)
2.8 })
2.9 class PairModel {
2.10 @ComputedProperty
2.11 @@ -41,6 +42,11 @@
2.12 return Arrays.asList(firstName, lastName);
2.13 }
2.14
2.15 + @ComputedProperty
2.16 + static Pair nextOne(Pair next) {
2.17 + return next;
2.18 + }
2.19 +
2.20 @Function
2.21 static void assignFirstName(Pair m, String data) {
2.22 m.setFirstName(data);
3.1 --- a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java Fri Aug 09 16:50:00 2013 +0200
3.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java Fri Aug 09 16:56:47 2013 +0200
3.3 @@ -543,6 +543,8 @@
3.4 // OK
3.5 } else if (tu.isSubtype(toCheck, enumType)) {
3.6 // OK
3.7 + } else if (isModel(toCheck)) {
3.8 + // OK
3.9 } else {
3.10 ok = false;
3.11 error(sn + " cannot return " + toCheck, e);