Re: [DOM4] EventTarget as first class citizen

On Wed, Feb 29, 2012 at 3:24 PM, Anne van Kesteren <annevk@opera.com> wrote:
> On Mon, 27 Feb 2012 15:18:55 +0100, Marcos Caceres <w3c@marcosc.com> wrote:
>>
>> On Thursday, February 23, 2012 at 3:18 PM, Jonas Sicking wrote:
>>>
>>> I think the way we should do this is to enable instantiating
>>> EventTarget objects using an EventTarget ctor. This won't give you a
>>> neato extension syntax, but I think we'll have to rely on ES.next for
>>> that. Before ecma-script has a better solution you can always
>>> monkeypatch the object.
>>>
>>> So something like:
>>> a = new EventTarget();
>>> b = new EventTarget(a); // a is the parent in the target chain
>>>
>>> should be doable. I don't know if we need a way to modify the parent
>>> chain after construction. It's somewhat complex to allow this while
>>> still preventing cycles from being created.
>>
>> It would be great to see something like the above.
>
> Unless someone explains how that graph model applies to the tree model we
> have now and what the processing model around it will, I'm not sure this
> will go anywhere.

Sorry, I guess I left out that critical part.

The simplest solution would be that for something like

b = new EventTarget(a);

say that "a" must be an object created using the EventTarget
constructor. As long as we don't have syntax for modifying the "event
target parent" there would be no way of constructing arbitrary graphs.
Only trees would be constructable. That's what I meant with the part
about not being able to modify the parent in the original email.

A more complex solution would also allow modifying the target-chain
parent. For something like
b.eventTargetParent = a;
we would have to walk up a's parent chain and check if b is in the
chain. If it is we'd have to throw an exception. We'd also have to
require that a is constructed using the EventTarget constructor.

Either of these methods will result in only trees and not arbitrary graphs.

/ Jonas

Received on Wednesday, 29 February 2012 16:26:34 UTC