2011-02-22 7 views

Respuesta

14

uso y demo

dojo.query("body").delegate(selector, eventName, fn); 

código - reescribe el original mixin como delegate función del dojo

dojo.provide("dojox.NodeList.delegate"); 
dojo.require("dojo.NodeList-traverse"); 
dojo.extend(dojo.NodeList, { 
    delegate: function (selector,eventName, fn) { 
     return this.connect(eventName, function (evt) { 
      var closest = dojo.query(evt.target).closest(selector, this); 
      if (closest.length) { 
       fn.call(closest[0], evt); 
      } 
     }); //dojo.NodeList 
    } 
}); 

ver ticket#11459

Puede usar esto más generalmente como jQuery delegate, no solo como live, porque live es básicamente un delegate en el nivel del documento.

+2

En aras de la aclaración, la función 'delegate' debe estar disponible en la versión completa de Dojo 1.6 requiriendo' dojox.NodeList.delegate' (este módulo se puede ver en el conjunto de cambios al final del ticket vinculado) en la respuesta). 1.6 RC actualmente está disponible si tiene curiosidad. http://download.dojotoolkit.org/release-1.6.0rc1/ –

+0

Sí, está disponible desde 1.6: http://dojotoolkit.org/reference-guide/dojox/NodeList/delegate.html#dojox-nodelist-delegate –

1

creo dojo.behavior realiza una función similar

0

sólo tiene que utilizar

on(document, "xxx", function(){}) 

por ejemplo. en jQuery: $(".className").live(function(){})

en el dojo, se evquilant a: on(document, ".className", function(){})

En realidad eso es lo que hace jquery.live, que se unen al evento para el documento para lograr la función.

Cuestiones relacionadas