Re: [webcomponents] Inheritance in Custom Elements (Was Proposal for Cross Origin Use Case and Declarative Syntax)

Thanks.

On Dec 5, 2013, at 8:30 PM, Dimitri Glazkov <dglazkov@chromium.org> wrote:
> On Thu, Dec 5, 2013 at 7:55 PM, Ryosuke Niwa <rniwa@apple.com> wrote:
> On Nov 11, 2013, at 4:12 PM, Dimitri Glazkov <dglazkov@chromium.org> wrote:
> > 3) The approach pollutes global name space with constructors. This had been voiced many times as unacceptable by developers.
> >
> > 4) How does build a custom element that uses <name-card> as its base element? What about <div> or any other HTML element?
> >
> > The last one remains to be the hardest. The tortured inheritance support is what killed <element> in the first place. We can't ignore the inheritance, since it is clearly present, in both DOM and JS. If we attempt to punt on supporting it, our decisions cut off the opportunities to evolve this right in the future, and will likely leave us with boogers like multiple syntaxes for inheritance vs. non-inheritance use cases.
> 
> What exactly are you referring to by inheritance support? 
> 
> Inheritance from all builtin elements (e.g. subclasses of HTMLElement)?
> 
> Or inheritance from custom elements authors have defined?
> 
> Sure, both are fine. Why should we treat them differently?

For the following reasons to list a few:
We don't have any subclass of HTMLElement that can be instantiated and has subclasses.
Author scripts can't access internal states of builtin elements; e.g. dirtiness of values in HTMLInputElement.
Methods and properties of builtin elements are not designed to be overridden by subclasses.
Behaviors of builtin elements will be changed by UAs in the future without author-defined subclasses being "upgraded" accordingly, thereby violating Liskov substitution principle.

> And could you give us a pointer for a list of concrete use cases?
> 
> Look at any mature Web framework. They all have hierarchies of objects:
> 
> http://docs.sencha.com/extjs/4.2.2/#!/api
> http://quickui.org/catalog/

It seems like both of these libraries only support inheritance from their own elements, not form builtin elements.

> The latter is undergoing a complete rewrite to be custom element-based, so you might find it useful to study:
> 
> https://github.com/JanMiksovsky/quetzal
> 
> If the atomic unit of your framework is a DOM element, then DOM elements must support being extended via inheritance. Jan Miksovsky (cc'd) is a good person to talk about inheritance properties of custom elements.

Great.

- R. Niwa

Received on Friday, 6 December 2013 04:51:29 UTC