1.1 --- a/ko4j/src/main/java/org/netbeans/html/ko4j/KOTech.java Fri Oct 02 08:57:14 2015 +0200
1.2 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/KOTech.java Sun Oct 04 14:55:01 2015 +0200
1.3 @@ -66,6 +66,10 @@
1.4
1.5 @Override
1.6 public Object wrapModel(Object model, PropertyBinding[] propArr, FunctionBinding[] funcArr) {
1.7 + return createKO(model, propArr, funcArr, null);
1.8 + }
1.9 +
1.10 + final Object createKO(Object model, PropertyBinding[] propArr, FunctionBinding[] funcArr, Knockout[] ko) {
1.11 String[] propNames = new String[propArr.length];
1.12 boolean[] propReadOnly = new boolean[propArr.length];
1.13 Object[] propValues = new Object[propArr.length];
1.14 @@ -83,8 +87,12 @@
1.15 funcNames[i] = funcArr[i].getFunctionName();
1.16 }
1.17 Object ret = getJSObject();
1.18 - new Knockout(model, ret, propArr, funcArr).wrapModel(
1.19 - ret,
1.20 + Knockout newKO = new Knockout(model, ret, propArr, funcArr);
1.21 + if (ko != null) {
1.22 + ko[0] = newKO;
1.23 + }
1.24 + newKO.wrapModel(
1.25 + ret,
1.26 propNames, propReadOnly, propValues,
1.27 funcNames
1.28 );
2.1 --- a/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java Fri Oct 02 08:57:14 2015 +0200
2.2 +++ b/ko4j/src/main/java/org/netbeans/html/ko4j/Knockout.java Sun Oct 04 14:55:01 2015 +0200
2.3 @@ -44,6 +44,9 @@
2.4
2.5 import java.lang.ref.ReferenceQueue;
2.6 import java.lang.ref.WeakReference;
2.7 +import java.util.Collections;
2.8 +import java.util.HashSet;
2.9 +import java.util.Set;
2.10 import net.java.html.js.JavaScriptBody;
2.11 import net.java.html.js.JavaScriptResource;
2.12 import net.java.html.json.Model;
2.13 @@ -62,6 +65,7 @@
2.14 @JavaScriptResource("knockout-3.2.0.debug.js")
2.15 final class Knockout extends WeakReference<Object> {
2.16 private static final ReferenceQueue<Object> QUEUE = new ReferenceQueue();
2.17 + private static final Set<Knockout> active = Collections.synchronizedSet(new HashSet<Knockout>());
2.18
2.19 private PropertyBinding[] props;
2.20 private FunctionBinding[] funcs;
2.21 @@ -79,6 +83,7 @@
2.22 for (int i = 0; i < funcs.length; i++) {
2.23 this.funcs[i] = funcs[i].weak();
2.24 }
2.25 + active.add(this);
2.26 }
2.27
2.28 static void cleanUp() {
2.29 @@ -87,6 +92,7 @@
2.30 if (ko == null) {
2.31 return;
2.32 }
2.33 + active.remove(ko);
2.34 clean(ko.js);
2.35 ko.js = null;
2.36 ko.props = null;