sXBL issue -- bindings getting notified when the bound element is inserted into a document

I am proposing that we add an event that fires when the bound element is 
inserted into the document to sXBL.  By "inserted" I mean "the Document node 
appears in the list of ancestor nodes of the bound element."

To clarify, consider the following pseudocode:

   var elem = document.createElement("something");
   elem.callMethodDefinedInXBL();
   document.documentElement.appendChild(elem);

As far as I can tell from the sXBL specification, the binding can be attached to 
"elem" when the node is created, so making the method call in line two of the 
pseudocode should be OK.

Note that the binding constructor will also run when the binding is attached, 
before the node is inserted into the document.  And it's not inconceivable that 
a binding may want to do something depending on where in the document the bound 
element ended up (given what the bindings used by many of Mozilla's UI widgets 
do, it seems rather likely).

The problem is, there is no good way for the binding to be notified when the 
bound element is inserted into a document.  DOM3 Mutation Events don't provide 
this functionality, unfortunately -- if the bound element is appended as a child 
to some other node and the other node is inserted in the document, the mutation 
event will fire on the other node.  Since events don't propagate down the tree, 
the bound element will never see the mutation event.

This could be worked around by watching events on the document itself, but all 
such approaches I can think of are rather inefficient (necessitating the need 
for walking all kids of the event target to find out whether we care about the 
event).

Hence my proposal to fire an event (non-bubbling, probably) on the bound element 
itself when it's inserted into the document, whether directly or via one of its 
ancestors being inserted.

-Boris

Received on Friday, 29 October 2004 17:34:30 UTC