Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/09/2010, 05:34
murciano
 
Fecha de Ingreso: septiembre-2010
Mensajes: 2
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Manejador de evento como parte de una clase

No sé si te he entendido bien, pero intentaré darte mi punto de vista.

Creo que intentas crear controles propios, como podría ser por ejemplo un calendario o un desplegable que se autocompleta o modifica al producirse eventos sobre el mismo.

Lo más simple a mi entender es que encapsules objetos y eventos dentro de una instancia propia, en vez de intentar dar un significado a un objeto:

Código:
var calendario=new Calendar();
lugarDeCalendario.appendChild(calendario);
Donde calendar tiene dentro el código de eventos que pueden producir asociado a el contenido html que pueda tener.

Siguiendo con el ejemplo del calendar, y suponiendo que lo hacemos con una tabla, el propio objeto calendar genera un div cuyo contenido para el dia 13 puede ser estilo:
Código:
<td id="d13" onclick="alter(\"dia 13\");">13<td>
Con esto tienes un componente cerrado con su comportamiento, como lo haría extJS.

Lo único que te queda ahora es que el comportamiento sea modificable, para lo que yo utilizaría elprincipio de simplicidad: Javascript es tipado débil y en cualquier momento puedes redefinir cualquier cosa (pública), asi que si quieres que el día 13 tenga otra alerta, podrias hacer un:
Código:
calendario.getElementById("d13").onclick= function(){...
Hay que tener en cuenta que los id son globales, asi que puede utilizarse otro mecanismo, o generar los ids para el contenedor: id="calendario1_d13"

Si quieres un comportamiento común a los objetos, no solo modificar dicha instancia, deberías tocar el prototype de la clase Calendar.

Si no me he explicado, o no he entendido que es lo que pretendes, o estoy hablando tonterías... o si todo esto es una patada a los estándares y demás, cosa en lo que eres más experto que yo, espero que lluevan las críticas, porque solo así aprenderé. :P


PD: Sobre el tema del this (una vez hayas decidido como quieres hacer tu widget, si a "mi estilo" o al tuyo), el problema es simple si manejas variables públicas, privadas, etc...si no me equivoco demasiado (corríjanme los expertos), creo que va asi:

Código:
	function Demo()
	{
		var privateProperty=0;					//read-write from privileged
		var privateMethod=function(){};			//read-write from privileged
		this.privilegedProperty=1;
		this.privilegedMethod=function(){};
	}
	Demo.staticProperty=2;						//only 1 instance
	Demo.staticMethod=function(){};				//only 1 instance
	Demo.prototype.publicProperty=3;			//read-write class-level
	Demo.prototype.publicMethod=function(){};	//read-write class-level

Última edición por murciano; 09/09/2010 a las 05:48