Skip to content

Commit e1bbd8c

Browse files
committed
fix in observer disposer logic
1 parent efd82a8 commit e1bbd8c

File tree

6 files changed

+71
-26
lines changed

6 files changed

+71
-26
lines changed

app/App.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { LitElement, html, css } from 'https://jspm.dev/npm:lit@2';
22
import { StoreObservable } from './model.js';
3-
import { makeObserver, reaction } from '../dist/picosm.js';
3+
import { litObserver, reaction } from '../dist/picosm.js';
44

55
/**
66
* also see ../index.html
@@ -178,4 +178,4 @@ export class App extends LitElement {
178178
}
179179
}
180180

181-
customElements.define('pico-demo', makeObserver(App, ['store']));
181+
customElements.define('pico-demo', litObserver(App, ['store']));

dist/picosm.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,23 +119,23 @@ function untrack(target, source) {
119119
}
120120

121121
// src/LitObserver.js
122-
function makeObserver(constructor, properties) {
122+
function litObserver(constructor, properties) {
123123
return class LitObserver extends constructor {
124+
#observables = /* @__PURE__ */ new Set();
125+
#disposers = /* @__PURE__ */ new Set();
124126
constructor(...args) {
125127
super(...args);
126-
this.observables = /* @__PURE__ */ new Set();
127-
this.disposers = /* @__PURE__ */ new Set();
128128
}
129129
trackProperties() {
130130
properties.forEach((property) => {
131131
const observable = this[property];
132132
if (!observable?.__observers)
133133
return;
134-
if (this.observables.has(observable)) {
134+
if (this.#observables.has(observable)) {
135135
return;
136136
}
137-
this.observables.add(observable);
138-
observe(observable, this.requestUpdate.bind(this));
137+
this.#observables.add(observable);
138+
this.#disposers.add(observe(observable, this.requestUpdate.bind(this)));
139139
});
140140
}
141141
update(changedProperties) {
@@ -144,22 +144,23 @@ function makeObserver(constructor, properties) {
144144
}
145145
connectedCallback() {
146146
super.connectedCallback();
147-
this.observables.forEach((o) => {
148-
observe(o, this.requestUpdate.bind(this));
147+
this.#observables.forEach((o) => {
148+
this.#disposers.add(observe(o, this.requestUpdate.bind(this)));
149149
});
150150
}
151151
disconnectedCallback() {
152152
super.disconnectedCallback();
153-
this.disposers.forEach((disposer) => {
153+
this.#disposers.forEach((disposer) => {
154154
disposer();
155155
});
156-
this.disposers.clear();
156+
this.#disposers.clear();
157+
console.log(this.#disposers.size);
157158
}
158159
};
159160
}
160161
export {
162+
litObserver,
161163
makeObservable,
162-
makeObserver,
163164
observe,
164165
reaction,
165166
track,

0 commit comments

Comments
 (0)