Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/03/2012, 02:52
Urdaris_Nox
 
Fecha de Ingreso: mayo-2008
Mensajes: 103
Antigüedad: 16 años, 9 meses
Puntos: 14
Dudas de novato - Javascript OO

Buenas a todos.

Estoy intentando aprender a programar Javascript orientado a objetos, y pese a entender qué es OO, me está costando el tema de los privates, públicos y demás (si alguien conoce una web que sea buena explicándolo lo agradecería, hasta ahora sólo he encontrado jeroglíficos ¬¬)

Problema:
Quiero una clase para controlar los layers de una página; a la izquierda opciones y a la derecha contenido. Al clickear una opción se hace un fadeOut en un layer de la derecha y, al acabar, un fadeIn al que se ha pulsado.
Además, a la opción pulsada le agrego un CSS para indicar que es la activa.

(Advierto de que seguramente es una chapuza...)

Código:

Código:
function faqControl ($firstSelector, $firstLayer) {
// METHODS
	this.switchOption = function ($newSelector, $newLayer) {
		if(this.switchAdmitted()) {
			this.changeLayer($newLayer);			
			this.unselectSelector();
			this.$currentSelector = $newSelector;
			this.selectSelector();
		}		
	};
	
       // Este metodo solo es para asegurarme de que mostramos una capa a la vez.
	this.switchAdmitted = function () {
		if(this.state != 'ready')
		return false;
		else 
		return true;
	}
	this.unselectSelector = function () {
		this.$currentSelector.removeClass('selected');
	};
	
	this.selectSelector = function () {
		this.$currentSelector.addClass('selected');
	};
	
	this.changeLayer = function ($newLayer,callback) {
		this.state = 'changing';
		this.$currentLayer.fadeOut('slow', function () {
			$newLayer.fadeIn('slow', function () {
				this.state='ready';
				});
		});
		this.$currentLayer = $newLayer;
	};
	
	this.showLayer = function () {
		this.$currentLayer.fadeIn('fast');
	};
	
	//Constructor. Given objects will be the first elements shown.
	this.$currentSelector = $firstSelector;
	this.$currentLayer = $firstLayer;
	this.state = 'ready';

	this.selectSelector();
	this.showLayer();
}
Los problemas los tengo en la llamada a funciones desde los callbacks de fadeIn y fadeOut. Creo que tiene algo que ver con los Scopes (áreas de trabajo de las variables, ¿verdad?), y con la forma de declarar variables públicas y privadas. Pero todo esto ahora mismo me es muy confuso porque está muy raramente explicado por ahí fuera.

Gracias por todas las colaboraciones de antemano ;D