[SOLUCIONADO] Ocultar un formulario

Gente, buen día, tengo el siguiente problema, tengo un CI el cual contiene 2 formularios, el segundo debe aparecer según si el primero trae datos (en el primer form busco datos mediante ajax). Estuve buscando una solución en el foro pero solo encontré esto.

ttp://foro.comunidad.siu.edu.ar/index.php?topic=7151.msg30331h

El cual no comprendo la solución que plantean.

Como siempre, desde ya muchas gracias!

Hola Javier,

la solucion que se planteaba ahi, era ocultar el formulario directamente en el servidor, ya que se sabia de antemano como se estaba comportando la operacion, en ese caso solo debia pasar en el alta.

En tu caso, se podria aplicar algo similar… salvo que los datos que recuperas via ajax no los conozcas al momento de viajar al cliente con la pantalla.

En dicho caso, tendrias que poder ocultar el formulario via API JS. Sin embargo, tene en cuenta que sus datos viajaran al servidor de todas maneras en el POST y por tanto, deberias realizar alli un nuevo control para saber si deberias descartarlos o utilizarlos.

Saludos

Gracias por la respuesta, pero exactamente cómo podes hacer esto??

tendrias que poder ocultar el formulario via API JS

Les comento tengo el siguiente código en el CI

function extender_objeto_js()
	{
              
            $this->js_busco_datos();
            echo "
		//---- Procesamiento de EFs --------------------------------
		
		{$this->objeto_js}.evt__apellido__procesar = function(es_inicial)
		{
                    this.dep('form_recurso').ocultar();
		}
		";
	}    

Con el firebug no me muestra error y no oculta el form_recurso…

Hola Javier,

el metodo que invocas es el correcto, el problema me parece que esta en el scope de la llamada. El evt procesar del campo apellido se va a disparar dentro del scope del formulario, como lo tenes definido vos… esa funcion queda dentro del scope del CI, que esta por fuera y por tanto no se va a llamar nunca.

Por otra parte, los formularios estan a igual altura, asi que para ir de uno a otro, necesitas pasar por el controlador… no hay una referencia directa. Entonces tu llamada a this.dep, necesariamente tiene que subir hasta el padre y luego bajar.

Dicho de otra manera, si lo queres tener a nivel de CI, deberias hacer algo asi:


function extender_objeto_js()
	{
             $scope_form = $this->dep('form_visible')->get_id_objeto_js(); 
            $this->js_busco_datos();
            echo "
		//---- Procesamiento de EFs --------------------------------
		
		$scope_form.evt__apellido__procesar = function(es_inicial)
		{
                              this.controlador.dep('form_recurso').ocultar();
		}
		";
	}  

A nivel del otro formulario, lo unico que te cambia es la variable $scope_form … que en ese caso si seria $this->objeto_js

Saludos

Richard, exelente, como siempre muchas gracias!!!

Richard, un favor tengo un caso parecido,

Dependiendo del ingreso de nro. de identificación dentro del formulario si ya existe, necesito dejar el formulario completo de solo lectura, pero veo que para JS no se encuentra el método set_solo_lectura (true), me toca ef x ef ? como es una encuesta son demasiados campos, me vendría algo así como this.controlador.dep(‘form_recurso’).set_solo_lectura();

Que solución me puedes dar a este caso ? ya que dejar la validación para el final sería un contrasentido porque se perdería todo el trabajo del formulario.

Gracias

Bueno, lo solucione con un bucle

for (id_ef in this.efs()) { this.ef(id_ef).set_solo_lectura (true); }
this.ef(‘per_identificacion’).set_solo_lectura (false);

Gracias

Richard, una consulta más sobre este tema, en el caso que quiera ocultar/mostrar el evento guardar, del CI que contiene los formularios, cómo se hace esto? Porque había visto una vez que se podía eliminar_evento() de una pantalla, pero yo no lo quiero eliminar, solamente ocultar. Esto se puede?

Gracias!

Hola Jhon,

no hay solucion, salvo ir ciclando por cada ef, la otra es ocultar el formulario completamente… pero si eso no es viable, hay que ir uno por uno.

Saludos

Hola Javier,

depende de la logica que deshabilite el boton, es algo que podes saber de antemano o depende totalmente de los valores en runtime?.

En el primer caso podrias usar las restricciones funcionales, en el segundo… quizas esto

Saludos

Richard, depende de los valores del RunTime, la idea es la siguiente, en el primer formulario se ingresa un DNI y se busca la persona, si la encuentra habilita el segundo formularo para que termine de cargar los datos. En caso de que no lo encuentre no muestra el segundo formulario y debería ocultar o deshabilitar el botón Guardar. Lo que tengo actualmente es lo siguiente:

                            if (estado == ' '){
                                this.dep('form_recurso').ocultar();
                                this.dep('form_recurso').desactivar_boton('procesar');
                            }else{
                                this.dep('form_recurso').mostrar();
                            }

La línea formulario.ocultar() funciona bien, pero tengo dudas sobre el boton. Así esta bien o lo tengo mal definido?

Gracias!

Listo!! lo solucioné, era un tema de scope. Era this.mostrar_boton en vez de this.dep…

Gracias!!