[FIX] observer: better handling of reassigning state

closes #50
This commit is contained in:
Géry Debongnie
2019-04-18 11:30:33 +02:00
parent d9d109c9a2
commit 4fb2733321
2 changed files with 31 additions and 20 deletions
+2 -8
View File
@@ -73,6 +73,7 @@ export class Observer {
}
if ("__owl__" in value) {
// already observed
value.__owl__.parent = parent;
return;
}
if (Array.isArray(value)) {
@@ -88,12 +89,6 @@ export class Observer {
this.notifyChange();
}
unobserve(target: any) {
if (target !== null && typeof target === "object") {
delete target.__owl__;
}
}
_observeObj<T extends { __owl__?: any }>(obj: T, parent?: any) {
const keys = Object.keys(obj);
obj.__owl__ = { rev: 1, deepRev: 1, parent };
@@ -131,14 +126,13 @@ export class Observer {
`Observed state cannot be changed here! (key: "${key}", val: "${newVal}")`
);
}
self.unobserve(value);
value = newVal;
self.observe(newVal, obj);
obj.__owl__.rev!++;
let parent = obj;
do {
parent.__owl__.deepRev++;
} while ((parent = parent.__owl__.parent));
} while ((parent = parent.__owl__.parent) && parent !== obj);
self.notifyChange();
}
}