[FIX] store: unobserve detached objects

closes #27
This commit is contained in:
Géry Debongnie
2019-04-15 10:43:50 +02:00
parent 7b87470760
commit 9ee85e220b
2 changed files with 19 additions and 0 deletions
+7
View File
@@ -137,6 +137,7 @@ export function makeObserver(): Observer {
);
}
if (newVal !== value) {
unobserve(value);
value = newVal;
observe(newVal, obj);
obj.__owl__.rev!++;
@@ -229,6 +230,12 @@ export function makeObserver(): Observer {
}
}
function unobserve(target: any) {
if (target !== null && typeof target === "object") {
delete target.__owl__;
}
}
return observer;
}
+12
View File
@@ -308,6 +308,18 @@ describe("observer", () => {
expect(state.a.__owl__.rev).toBe(2);
});
test("properly unobserve objects in object", () => {
const observer = makeObserver();
const state: any = { a: { b: 1 } };
observer.observe(state);
expect(state.__owl__.rev).toBe(1);
const initialA = state.a;
expect(initialA.__owl__.rev).toBe(1);
state.a = "Karlsquell";
expect(initialA.__owl__).not.toBeDefined();
});
test("reobserve new object values", () => {
const observer = makeObserver();
const obj: any = { a: 1 };