- From: Joseph Orbegoso Pea <notifications@github.com>
- Date: Tue, 23 Aug 2016 20:41:57 -0700
- To: w3c/webcomponents <webcomponents@noreply.github.com>
- Message-ID: <w3c/webcomponents/issues/550/241949288@github.com>
> MutationObserver doesn't get invoked until the end of microtask whereas custom element callbacks get invoked almost immediately so it isn't quite polyfillable.
> well, it could but that's undesired, hence my suggestion to use MutationObserver instead (even if not quite the same, I guess it's fine for 99% of use cases)
Actually, I'm running into hitches due to this exact problem, which makes it difficult to coordinate some of my connected/disconnected logic with my polyfill.
For reference, my polyfill looks like this, in my `WebComponent` base class, with code omitted for brevity:
```js
// some code omitted for brevity...
export default
function WebComponentMixin(elementClass) {
if (!elementClass) elementClass = HTMLElement
if (!hasHTMLElementPrototype(elementClass)) {
throw new TypeError(
'The argument to WebComponentMixin must be a constructor that extends from or is HTMLElement.'
)
}
// some code omitted for brevity...
// otherwise, create it.
class WebComponent extends elementClass {
// constructor() is used in v1 Custom Elements instead of
// createdCallback() as in v0.
constructor() {
super()
// some code omitted for brevity...
this.createdCallback()
}
createdCallback() {
// some code omitted for brevity...
const observer = new MutationObserver(changes => {
for (let change of changes) {
if (change.type != 'childList') continue
for (let node of change.addedNodes)
this.childConnectedCallback(node)
for (let node of change.removedNodes)
this.childDisconnectedCallback(node)
}
})
observer.observe(this, { childList: true })
}
// Subclasses can implement these.
childConnectedCallback(child) {}
childDisconnectedCallback(child) {}
// some code omitted for brevity...
}
// some code omitted for brevity...
return WebComponent
}
```
Then, subclasses simply implement the `childConnectedCallback` and `childDisconnectedCallback` methods. But, as mentioned, timing issues happen because the observation does happen in coordination with the connected/disconnected methods, forcing me in some situations to use promises and `await` to coordinate things in a somewhat ugly manner (in my sub classes).
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/webcomponents/issues/550#issuecomment-241949288
Received on Wednesday, 24 August 2016 03:42:33 UTC