La delegación de eventos se trata simplemente de colgar controladores de eventos más arriba en el árbol DOM. Todos los marcos pueden/deberían ser capaces de hacer eso. Los manejadores deberían poder detectar cualquier evento que burbujee. El evento contiene el elemento que lo activó y, a partir de eso, el controlador puede hacer lo que sea.
El prototipo no tiene ningún evento de delegación de azúcar nativo de la biblioteca que funcione como jQuery's $.fn.live
, pero es bastante simple crear una función que atrape eventos y haga cosas con sus elementos de destino.
document.observe('click',function(event){alert(event.element().inspect())})
Usted puede usar esto para hacer un clon de jQuery en vivo con bastante facilidad (no estoy diciendo que esto va a ir bien o nada).
live = function(selector,callback){
document.observe("click",function(e){
var element = e.element()
if (!element.match(selector))
element = element.ancestors().find(function(elem){return elem.match(selector)});
else
element = null
if (element)
callback.apply(element)
})
}
se le puede llamar como:
live("div",function(){this.setStyle({color:'blue'})})
Creo que lo que digo es que evento delegación está integrada en javascript ya. Las bibliotecas solo agregan azúcar.
OK. Entonces, ¿qué bibliotecas NO tienen delegación de eventos? :-) – Nosredna