2010-09-08 7 views

Respuesta

10

Sí, esto es posible. Sólo tiene que pasar una serie de nombres de eventos en lugar de una cadena:

Y.one('input.units').on(['keyup', 'change'], function (e) { 
    // ... 
}); 
+0

Excelente, ahora he cambiado esto para ser la respuesta aceptada. Gracias a todos los que contribuyeron. – delimited

+0

para jQueryers: 'node.on ('bind change'.split (' '), function() {});' –

+0

¿Funciona esto también para delegados? – chrisjlee

1

por qué no intentar algo como esto:

var actionFunction = function(e) { /* stuff goes here */ }; 

node.one("input.units").on("keyup", actionFunction); 
node.one("input.units").on("change", actionFunction); 
+0

(sentado al lado de @delimited que no puedo comentar sobre la suya en cuestión) que acaba de hacer exactamente eso ... sólo que esperaba una solución más elegante –

+0

Ahh ... gotcha. Pensé que solo estaba tratando de encontrar una forma de activar la función para ambos eventos. – Pat

+0

Una solución más elegante sería envolver todo en '(function() {...})()' y capturar la 'var actionFunction' privada como cierre, haciéndola esencialmente anónima. ¿Eso es lo que OP después de la derecha? ¿Prevenir la contaminación global del espacio de nombres? Espera, vamos a pensar que es YUI3. El código ya está envuelto en una función. – slebetman

1

EDIT: YUI soporta de forma nativa. Vea la respuesta de Ryan a continuación.

No. Se podría hacer algo como esto, sin embargo:

YUI().use("node", "oop", function (Y) { 
var on = Y.Node.prototype.on; 

function detachOne(handle) { 
    handle.detach(); 
} 

Y.mix(Y.Node.prototype, { 
     on: function (type, fn, context) { 
      var args = Y.Array(arguments), 
       types = args[0].split(" "), 
       handles = []; 

      Y.each(types, function (type) { 
        args[0] = type; 
        handles.push(on.apply(this, args)); 
       }) 

      return { 
       detach: Y.bind(Y.each, null, handles, detachOne) 
      }; 
     } 
    }, true); 
}) 

Este código se envuelve Node.on() para aceptar una serie de tipos de eventos delimitados por espacios. Devuelve un objeto con un único método, detach, que separa su manejador de todos los eventos.

Tenga en cuenta que este código sólo afecta a la instancia Y dentro de su caja de arena, por lo que debe ponerlo dentro de la función que se pasa a YUI().use. También sería fácil empaquetarlo como un módulo.

+0

Excelente respuesta, gracias. – delimited

+1

En realidad, es posible. Todo lo que necesita hacer es pasar una variedad de tipos de eventos. Sin embargo, esta solución es una gran demostración de cómo es posible doblar las partes internas de YUI a su voluntad. –

Cuestiones relacionadas