- From: Hajime Morrita <morrita@google.com>
- Date: Fri, 22 Mar 2013 15:27:32 +0900
- To: public-webapps <public-webapps@w3.org>
- Message-ID: <CALzNm5r6g5_NopiOUJ5DaSRhP_KhTS0TJqGttW5__+HnXnej_w@mail.gmail.com>
Hi folks, I'm implementing "readyCallback" of custom elements in WeKit. I'm following what MutationObserver is doing, with small modification. That is to make such calls as lazily as possible, and do it in batch. After some trial, I started wondering what is the most desirable "invocation order" of such delayed callbacks. For example, think about following snippet: div.innerHTML = "<x-parent><x-child></x-child></x-parent>"; In our curent implementation, the readyCallbacks of x-parent and x-child are called (1) just before returning form native innerHTML implementation to JS world, instead of (2) exactly when C++ backing objects are created. We don't want (1): running scripts while parsing is a well-known disaster pattern. However, (2) seems to have its own problem: If you (A): Call <x-parent> first and <x-child> next, does it work? This looks straightforward and matches the order of native constructor invocations. One problem here is that the <x-parent> constructor can see the uninitialized, or un-read-ified <x-child>, because <x-child> is already inserted into <x-parent>. This breaks the illusion that says the readyCallback is called just after the element is created. So what about (B): Call <x-child> first and <x-parent> second? This solves the "unreadified <x-child>" problem. But is this what we want? For me, it seems readyCallback with (B) unintentionally becomes more powerful than originally expected. It gets more than just a constructor alternative. And this fact could be abused easily. Also, the order is no longer simple enough to be explained within a few lines. For implementation simplicity, I prefer to pick (1) and to ask people not to assume the children is available in readyCallback. This might make sense; When the element is created through createElement(), we don't have any children in readyCallback anyway. But I'm not super confident about this. So I would like to hear your opinion. -- morrita
Received on Friday, 22 March 2013 06:35:44 UTC