mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
@@ -137,6 +137,7 @@ export function makeObserver(): Observer {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (newVal !== value) {
|
if (newVal !== value) {
|
||||||
|
unobserve(value);
|
||||||
value = newVal;
|
value = newVal;
|
||||||
observe(newVal, obj);
|
observe(newVal, obj);
|
||||||
obj.__owl__.rev!++;
|
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;
|
return observer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -308,6 +308,18 @@ describe("observer", () => {
|
|||||||
expect(state.a.__owl__.rev).toBe(2);
|
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", () => {
|
test("reobserve new object values", () => {
|
||||||
const observer = makeObserver();
|
const observer = makeObserver();
|
||||||
const obj: any = { a: 1 };
|
const obj: any = { a: 1 };
|
||||||
|
|||||||
Reference in New Issue
Block a user