- From: Daniel Buchner <daniel@mozilla.com>
- Date: Fri, 12 Apr 2013 14:31:14 -0700
- To: Scott Miles <sjmiles@google.com>
- Cc: Erik Arvidsson <arv@chromium.org>, John J Barton <johnjbarton@johnjbarton.com>, Dimitri Glazkov <dglazkov@google.com>, Allen Wirfs-Brock <allen@wirfs-brock.com>, Rick Waldron <waldron.rick@gmail.com>, Rafael Weinstein <rafaelw@google.com>, public-webapps <public-webapps@w3.org>, Blake Kaplan <mrbkap@mozilla.com>, William Chen <wchen@mozilla.com>, Jonas Sicking <jonas@sicking.cc>, Steve Orvell <sorvell@google.com>, Dave Herman <dherman@mozilla.com>, Boris Zbarsky <bzbarsky@mit.edu>
- Message-ID: <CAHZ6zJHpuGKXoQKGL=TNTFMnm9DQNRE8B4fKyT3StYW0UzebqQ@mail.gmail.com>
@Scott - interesting, but there are valid reasons for having access to the global scope/document: - Components that benefit from top-level delegation - Components that need to analyze their destination environment before codifying their definition Know what I mean? On Fri, Apr 12, 2013 at 2:25 PM, Scott Miles <sjmiles@google.com> wrote: > I realize this doesn't fit any existing conceptual model (that I know of) > but I think it's worth pointing out that all we really want to do is define > a prototype for the element (as opposed to running arbitrary script). > > Invented pseudo-code (not a proposal, just trying to identify a mental > model): > > <element name="x-foo" extends="<something>"> > <!-- prototype for markup --> > <template> > <template> > <!-- prototype for instances --> > <prototype> > readyCallback: function() { > }, > someApi: function() { > }, > someProperty: null > </prototype> > </element> > > > On Fri, Apr 12, 2013 at 2:13 PM, Erik Arvidsson <arv@chromium.org> wrote: > >> Daniel, what happens in this case? >> >> <element name="x-foo"> >> <script> >> class XFoo extends SVGElement { >> } >> </script> >> </element> >> >> This points out 2 short comings with your proposal. >> >> 1. This would just replace the global constructor. That might be OK, and >> we can detect this override to register the class as needed. >> 2. Prefixing with HTML seems like an anti pattern. >> >> >> On Fri, Apr 12, 2013 at 5:08 PM, Daniel Buchner <daniel@mozilla.com>wrote: >> >>> @John - what about what I just sent through? It hops over the magical >>> rebinding issue (or so I think), your thoughts? >>> >>> >>> On Fri, Apr 12, 2013 at 2:06 PM, John J Barton < >>> johnjbarton@johnjbarton.com> wrote: >>> >>>> >>>> Some suggestions: >>>> >>>> On Fri, Apr 12, 2013 at 12:30 PM, Dimitri Glazkov <dglazkov@google.com>wrote: >>>> >>>>> ... or "How the heck do we initialize custom elements in declarative >>>>> syntax?" >>>>> >>>>> There were good questions raised about the nature of <script> element >>>>> in the "platonic form" thread. Consider this syntax: >>>>> >>>>> <element name="foo-bar"> >>>>> >>>> >>>> <element constructor="FooBar"> >>>> >>>> >>>>> <script> ...</script> >>>>> <template> ... </template> >>>>> </element> >>>>> >>>>> The way <element> should work is like this: >>>>> a) when </element> is seen >>>>> b) generate a constructor for this element >>>>> >>>> >>>> b) call the nominated ctor, new FooBar(elt). >>>> >>>> I'm unclear on the practical advantages the instance inheriting from >>>> HTMLElement (new FooBar(), prototype inherits) vs manipulating the element >>>> from the outside (new FooBar(elt), prototype Object). >>>> >>>> >>>> >>>>> b) run document.register >>>>> c) run initialization code >>>>> >>>>> As I see it, the problem is twofold: >>>>> >>>>> 1) The <script> element timing is weird. Since <script> is >>>>> initialization code, it has to run after the </element> is seen. This >>>>> is already contrary to a typical <script> element expectations. >>>>> >>>> >>>> Why? new FooBar() has to be called, but the outer init is anytime >>>> before that. >>>> >>>> >>>>> >>>>> 2) The <script> element needs a way to refer to the custom element >>>>> prototype it is initializing. Enclosing it in a function and calling >>>>> it with <element> as |this| seemed like a simplest thing to do, but >>>>> Rick and John had allergic reactions and had to be hospitalized. >>>>> >>>> >>>> For me its the implicit declarative binding + wired in to 'this' that >>>> makes the >>>> original solution very magical and inflexible. I can understand >>>> ensuring that >>>> a component can be self-contained, but cannot understand why it needs an >>>> ordered and hierarchical when <script> isn't rendered. >>>> >>>> >>>>> >>>>> So far, I haven't seen any other workable alternatives. TC39 peeps and >>>>> others, help me find them. >>>>> >>>> >>>> Thanks for asking ;-) >>>> >>>> >>>>> >>>>> :DG< >>>>> >>>> >>>> >>> >> >> >> -- >> erik >> >> >> >
Received on Friday, 12 April 2013 21:32:11 UTC