Ver Mensaje Individual
  #10 (permalink)  
Antiguo 26/07/2007, 15:19
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Comprobación cálculo dinámico

Bueno, creo que estamos en un concepto un poco más apartado de lo que es la programación.

Si tienes los datos de cada área (nombre de área, horasTotales y horasSemanales) en el servidor, ¿Cómo esperas calcular y operar en javascript con ellos?

Es decir, la solución definitiva, reitero, es imprimir todos los datos que necesites para operar en el documento.


Es como querer sumar dos números, y uno lo tienes en la base de datos y otro en javascript. Si no vuelcas el primer número en la página en el código javascript ¿cómo esperas hacer la suma de los dos números si no los tienes disponibles? Esa es la idea.

Cita:
Iniciado por marcospuij
Pero es que viendo tu solución con los objetos, no entiendo cómo soluciona el problema, veo que con tu solución hay que usar también el onChange() porque si no, como sabes el área que tiene seleccionada en ese momento el usuario, y cómo le envías a javascript en ese momento las horas ¿tendrás que hacer la consulta primero no? y volvemos a estar en las mismas.
Bueno, aquí el problema se soluciona porque tienes todos los datos y todo lo necesario para calcular, operar las horas, y hacer los movimientos de las materias entre las áreas que tú necesites. Es decir, todo lo que necesitas lo tienes, no hay nada en el servidor que no tengas en el código javascript. Sigues necesitando por supuesto el onchange, nadie dijo lo contrario. Pero tenerlos en objetos y propiedades es una forma de tener los datos ordenados y controlados.

De esta manera si tienes la materia Álgebra dentro del área Matemáticas, y quieres mover esa materia Álgebra al área Lingüística, lo que debemos hacer es mirar si "cabe" en el área Lingüística, es decir, necesitas los datos horasTotales y horasSemanales, y la cantidad de horas que hay ocupadas -horasTotalesDisponibles y horasSemanalesDisponibles- o en su defecto la cantidad de asignaturas que contiene Lingüística, cada una con su número de horasTotales y horasSemanales. Es decir, necesitas prácticamente TODO en el javascript.

La solución práctica sería (esbozo):
Código PHP:
/// EN EL CLIENTE

<select name="areas" onchange="cambiarMateriaDeArea(materiaAlgebra,this)">
<
option>...</option>
...
</
select>
<
input type="submit" value="guardarCambios" />

Y en la función cambiarAsignaturaDeArea(objMateria,selectAreas) {
1. Localizamos el option seleccionado en el select 
2. Ese option tiene asignado un objetoArea ya declarado 
(descargado de la BD). Localizarlo
3. Si no está la materia dentro de ese área hacemos lo siguiente
:
4. if( objetoArea.cabeMateria(objMateria) )
    
objetoArea.anyadirMateria(objMateria);
    else
    
alert("Ha habido un error, la materia no puede introducirse en el área, no cabe"); 
}

document.formulario.onsubmit = function() {
1. Asignaremos a múltiples campos hidden los cambios necesarios
No estaría mal volver a volcar aquí todo el contenido de los objetos areapara saber qué materias contiene ahora cada área
}



/// EN EL SERVIDOR
1. Traemos todos los datos desde la BD
2. Comprobamos que los cambios sean coherentes
.
   
2.1Si son coherenteslos guardamos y devolvemos Éxito.
   
2.2Si no son coherentes devolvemos Error de coherencia

No es que sea fácil, pero es la manera de hacerlo todo en el ordenador del cliente cuando tienes todos los datos necesarios en el servidor. La única forma es volcarlos al código javascript o consultarlos mediante AJAX. Para mí esta es la forma más "normal" si es que son pocos datos.


¿Te ves capaz de intentarlo?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.