- From: Joseph Orbegoso Pea <notifications@github.com>
- Date: Sun, 21 Aug 2016 22:12:00 -0700
- To: w3c/webcomponents <webcomponents@noreply.github.com>
- Message-ID: <w3c/webcomponents/issues/550@github.com>
I think having such methods would make it much easier than using `MutationObserver` for doing things when children are connected to a custom element. Some reasons: - Suppose we wish to use `connectedCallback` to initiate a mutation observer, and `disconnectedCallback` to disconnect the observer, rather than initiating it in `createdCallback` or `constructor`. This has the side-effect that by the time `connectedCallback` is fired that the custom element may already have had children added to it, so the mutation observer won't catch those. - Using MutationObserver requires writing at least two nested for loops, which is much more verbose than simply placing logic inside a `childConnectedCallback(child)` method. f.e. compare ```js connectedCallback() { // or perhaps in createdCallback or constructor const observer = new MutationObserver(changes => { console.log('Child added!', changes) for (let change of changes) { for (let node of change.addedNodes) { if (node instanceof MotorHTMLNode) this.imperativeCounterpart.addChild(node.imperativeCounterpart) } for (let node of change.removedNodes) { if (node instanceof MotorHTMLNode) this.imperativeCounterpart.removeChild(node.imperativeCounterpart) } } }) observer.observe(this, { childList: true }) } ``` vs ```js childConnectedCallback(node) { this.imperativeCounterpart.addChild(node.imperativeCounterpart) } childDisconnectedCallback(node) { this.imperativeCounterpart.removeChild(node.imperativeCounterpart) } ``` - The API is just easier, which is a good thing for people learning the Custom Element API. On a similar note, it may be nice to have element-specific methods. For example (and as a possible alternative to my [`distributedCallback`](https://github.com/w3c/webcomponents/issues/527) idea), `HTMLSlotElement` could have a `childDistributedCallback(child)` method, and it wouldbe possible to make a Custom Element that extends from `HTMLSlotElement` and to use it in place of the default `<slot>` element. ```js class MySlot extends HTMLSlotElement { childDistributedCallback(child) { console.log('Child distributed into this slot:', child) } } customElements.define('my-slot', MySlot) ``` ```html <some-shadow-tree> <my-slot> </my-slot> </some-shadow-tree> ``` -- 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
Received on Monday, 22 August 2016 05:12:32 UTC