- From: Scott Miles <sjmiles@google.com>
- Date: Mon, 15 Apr 2013 09:50:01 -0700
- To: John J Barton <johnjbarton@johnjbarton.com>
- Cc: William Chen <wchen@mozilla.com>, Rafael Weinstein <rafaelw@google.com>, Daniel Buchner <daniel@mozilla.com>, Rick Waldron <waldron.rick@gmail.com>, Dave Herman <dherman@mozilla.com>, Allen Wirfs-Brock <allen@wirfs-brock.com>, Boris Zbarsky <bzbarsky@mit.edu>, Jonas Sicking <jonas@sicking.cc>, Blake Kaplan <mrbkap@mozilla.com>, public-webapps <public-webapps@w3.org>, Steve Orvell <sorvell@google.com>, Dimitri Glazkov <dglazkov@google.com>
- Message-ID: <CAHbmOLZdBOq3Q58UoMHByxjZf+igeF=yQBdHZeWW7Qys7Onc2w@mail.gmail.com>
Sorry for the extra posts. I promise to slow down. >> Why not use standard events rather than callbacks? I believe a better answer is that it was decided these callbacks had to work synchronously relative to imperative construction. So, I can do var xfoo = document.createElement('x-foo'); xfoo.doImportantThing(); On Mon, Apr 15, 2013 at 9:46 AM, Scott Miles <sjmiles@google.com> wrote: > >> The callbacks are convenient because (1) there is no question of 'who > registers a listener' (2) I can simply call my 'super' callback (or not) to > get inherited behavior.<< > > One minute later, these seem like bad reasons. I shouldn't have shot from > the hip, let me do some research. > > > On Mon, Apr 15, 2013 at 9:44 AM, Scott Miles <sjmiles@google.com> wrote: > >> >> Why do the constructors of component instances run during component >> loading? >> >> I'm not sure what you are referring to. What does 'component loading' >> mean? >> >> >> Why not use standard events rather than callbacks? >> >> This was discussed quite a bit, here is my off-the-cuff response. I may >> have to do archaeology to get a better one. >> >> Custom elements can inherit from custom elements. The callbacks are >> convenient because (1) there is no question of 'who registers a listener' >> (2) I can simply call my 'super' callback (or not) to get inherited >> behavior. >> >> IIRC, it is also advantageous for performance and for having control over >> the timing these calls. >> >> Scott >> >> >> On Mon, Apr 15, 2013 at 9:37 AM, John J Barton < >> johnjbarton@johnjbarton.com> wrote: >> >>> Why do the constructors of component instances run during component >>> loading? >>> >>> Why not use standard events rather than callbacks? >>> >>> Thanks, >>> jjb >>> On Apr 15, 2013 9:04 AM, "Scott Miles" <sjmiles@google.com> wrote: >>> >>>> Again, 'readyCallback' exists because it's a Bad Idea to run user code >>>> during parsing (tree construction). Ready-time is not the same as >>>> construct-time. >>>> >>>> This is the Pinocchio problem: >>>> http://lists.w3.org/Archives/Public/public-webapps/2013JanMar/0728.html >>>> >>>> Scott >>>> >>>> >>>> On Mon, Apr 15, 2013 at 7:45 AM, Rick Waldron <waldron.rick@gmail.com>wrote: >>>> >>>>> >>>>> >>>>> >>>>> On Mon, Apr 15, 2013 at 8:57 AM, Boris Zbarsky <bzbarsky@mit.edu>wrote: >>>>> >>>>>> On 4/14/13 5:35 PM, Rick Waldron wrote: >>>>>> >>>>>>> I have a better understanding of problem caused by these generated >>>>>>> HTML*Element constructors: they aren't constructable. >>>>>>> >>>>>> >>>>>> I'd like to understand what's meant here. I have a good >>>>>> understanding of how these constructors work in Gecko+SpiderMonkey, but I'm >>>>>> not sure what the lacking bit is, other than the fact that they have to >>>>>> create JS objects that have special state associated with them, so can't >>>>>> work with an object created by the [[Construct]] of a typical function. >>>>>> >>>>>> Is that what you're referring to, or something else? >>>>> >>>>> >>>>> Sorry, I should've been more specific. What I meant was that: >>>>> >>>>> new HTMLButtonElement(); >>>>> >>>>> Doesn't construct an HTMLButtonElement, it throws with an "illegal >>>>> constructor" in Chrome and "HTMLButtonElement is not a constructor" in >>>>> Firefox (I'm sure this is the same across other browsers) >>>>> >>>>> Which of course means that this is not possible even today: >>>>> >>>>> function Smile() { >>>>> HTMLButtonElement.call(this); >>>>> this.textContent = ":)"; >>>>> } >>>>> >>>>> Smile.prototype = Object.create(HTMLButtonElement.prototype); >>>>> >>>>> >>>>> Since this doesn't work, the prototype method named "readyCallback" >>>>> was invented as a bolt-on stand-in for the actual [[Construct]] >>>>> >>>>> Hopefully that clarifies? >>>>> >>>>> Rick >>>>> >>>>> >>>>> PS. A bit of trivial... A long time ago some users requested that >>>>> jQuery facilitate a custom constructor; to make this work, John put the >>>>> actual constructor code in a prototype method called "init" and set that >>>>> method's prototype to jQuery's own prototype. The thing called >>>>> "readyCallback" is similar. For those that are interested, I created a gist >>>>> with a minimal illustration here: >>>>> https://gist.github.com/rwldrn/5388544 >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>> >>>>>> >>>>>> -Boris >>>>>> >>>>> >>>>> >>>> >> >
Received on Monday, 15 April 2013 16:50:30 UTC