# HG changeset patch # User Jaroslav Tulach # Date 1448223515 -3600 # Node ID b5d5cbb44ce041eb81f521a903193a7b92b98e68 # Parent e66e962fed132ac29490ccd03e6313570e5c6cff fromRaw(toRaw(...)) should yield object with same values diff -r e66e962fed13 -r b5d5cbb44ce0 json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java --- a/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java Sat Nov 21 18:05:03 2015 +0100 +++ b/json-tck/src/main/java/net/java/html/json/tests/KnockoutTest.java Sun Nov 22 21:18:35 2015 +0100 @@ -167,6 +167,18 @@ Utils.exposeHTML(KnockoutTest.class, ""); } } + + @KOTest public void rawObject() { + final BrwsrCtx ctx = newContext(); + Person p1 = Models.bind(new Person(), ctx); + p1.setFirstName("Jarda"); + p1.setLastName("Tulach"); + Object raw = Models.toRaw(p1); + Person p2 = Models.fromRaw(ctx, Person.class, raw); + + assertEquals(p2.getFirstName(), "Jarda", "First name"); + assertEquals(p2.getLastName(), "Tulach", "Last name"); + } @KOTest public void modifyComputedProperty() throws Throwable { Object exp = Utils.exposeHTML(KnockoutTest.class, diff -r e66e962fed13 -r b5d5cbb44ce0 ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java --- a/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java Sat Nov 21 18:05:03 2015 +0100 +++ b/ko-ws-tyrus/src/main/java/org/netbeans/html/wstyrus/LoadJSON.java Sun Nov 22 21:18:35 2015 +0100 @@ -275,11 +275,12 @@ } } - @JavaScriptBody(args = {"object", "property"}, - body - = "if (property === null) return object;\n" - + "if (object === null) return null;\n" - + "var p = object[property]; return p ? p : null;" + @JavaScriptBody(args = {"object", "property"}, body = + "var ret;\n" + + "if (property === null) ret = object;\n" + + "else if (object === null) ret = null;\n" + + "else ret = object[property];\n" + + "return ret ? (typeof ko === 'undefined' ? ret : ko.utils.unwrapObservable(ret)) : null;" ) private static Object getProperty(Object object, String property) { return null; diff -r e66e962fed13 -r b5d5cbb44ce0 ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java --- a/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java Sat Nov 21 18:05:03 2015 +0100 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java Sun Nov 22 21:18:35 2015 +0100 @@ -66,6 +66,17 @@ final class Knockout extends WeakReference { private static final ReferenceQueue QUEUE = new ReferenceQueue(); private static final Set active = Collections.synchronizedSet(new HashSet()); + + @JavaScriptBody(args = {"object", "property"}, body = + "var ret;\n" + + "if (property === null) ret = object;\n" + + "else if (object === null) ret = null;\n" + + "else ret = object[property];\n" + + "return ret ? ko.utils.unwrapObservable(ret) : null;" + ) + static Object getProperty(Object object, String property) { + return null; + } private PropertyBinding[] props; private FunctionBinding[] funcs; diff -r e66e962fed13 -r b5d5cbb44ce0 ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java --- a/ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java Sat Nov 21 18:05:03 2015 +0100 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/LoadJSON.java Sun Nov 22 21:18:35 2015 +0100 @@ -52,16 +52,6 @@ final class LoadJSON { private LoadJSON() {} - @JavaScriptBody(args = {"object", "property"}, - body - = "if (property === null) return object;\n" - + "if (object === null) return null;\n" - + "var p = object[property]; return p ? p : null;" - ) - private static Object getProperty(Object object, String property) { - return null; - } - static String createJSONP(JSONCall whenDone) { int h = whenDone.hashCode(); String name; @@ -141,7 +131,7 @@ static void extractJSON(Object jsonObject, String[] props, Object[] values) { for (int i = 0; i < props.length; i++) { - values[i] = getProperty(jsonObject, props[i]); + values[i] = Knockout.getProperty(jsonObject, props[i]); } }